PlaceBufferResponse的release方法被限制,如何正确释放资源?
如何正确释放PlaceBufferResponse资源(替代被禁止的release()方法)
嘿,我来帮你搞定这个问题!你碰到的情况是因为release()现在是Google Places SDK的内部方法,官方已经禁止开发者直接调用了。不过别担心,我们有更优雅且符合规范的方式来处理资源释放——利用Kotlin的use函数(对应Java的try-with-resources),因为PlaceBufferResponse实现了AutoCloseable接口,它会自动帮我们管理资源生命周期。
直接给你修改后的代码:
val placeResult = mGeoDataClient.getPlaceById(placeId) placeResult.addOnCompleteListener(object : OnCompleteListener<PlaceBufferResponse> { override fun onComplete(task: Task<PlaceBufferResponse>) { task.getResult()?.use { places -> val place = places.get(0) isAutoCompleteLocation = true latLng = place.latLng assignToMap() // 不用手动调用release(),use函数会在代码块执行完后自动关闭资源 } } })
为什么这么做?
use函数是Kotlin针对AutoCloseable类型提供的扩展函数,它会确保代码块执行完毕(不管是正常结束还是抛出异常),都会自动调用对象的close()方法。而PlaceBufferResponse的close()方法内部已经替我们完成了原来release()的资源清理工作,完全符合官方规范。- 加上
?.空安全调用,还能避免task.getResult()返回null时出现空指针异常,让代码更健壮。
如果是用Java开发的话,对应的写法是try-with-resources语句:
placeResult.addOnCompleteListener(task -> { try (PlaceBufferResponse places = task.getResult()) { if (places != null) { Place place = places.get(0); isAutoCompleteLocation = true; latLng = place.getLatLng(); assignToMap(); } } });
内容的提问来源于stack exchange,提问作者AVEbrahimi
相关产品推荐
相关产品推荐

