You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:04:38