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

Android 13中Geocoder.getFromLocation回调线程不一致的问题及解决

Android 13 (API 33) Geocoder回调线程不一致导致UI异常的问题及修复

问题现象

在Android 13(API 33)环境下,调用Geocoder.getFromLocation()的lambda回调时,线程执行存在差异:

  • 首次触发回调时,代码运行在非主线程
  • 后续触发回调时,代码切换到主线程(推测是系统启用了缓存机制)

这种线程不一致会导致:首次启动应用时,若直接在回调内修改UI,应用既不会崩溃也无错误日志,但UI会显示空白;后续启动则能正常展示内容。

错误代码示例

geocoder.getFromLocation(
    latitude,
    longitude,
    1
) { textView.text = it[0].getAddressLine(0) }
// 注:原代码存在语法笔误,此处补全了成员调用的点符号

解决方法

通过绑定主线程Looper的Handler,强制将UI操作切换到主线程执行,确保无论回调在哪个线程触发,UI更新都符合Android线程规则:

geocoder.getFromLocation(
    latitude,
    longitude,
    1
) { addresses ->
    Handler(getMainLooper()).post {
        textView.text = addresses[0].getAddressLine(0)
    }
}

内容的提问来源于stack exchange,提问作者ilizma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:12:45