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

Kotlin更新TextView/ProgressBar报CalledFromWrongThreadException如何解决

报错根因

安卓系统限制所有UI控件的更新操作必须在创建该控件的主线程(也叫UI线程)执行,你的代码中是在Timer启动的子线程中直接更新ProgressBar和TextView,所以抛出了CalledFromWrongThreadException异常。

修复方法

只需要把UI更新逻辑切换到主线程执行即可,在Activity中可以直接调用runOnUiThread方法实现线程切换,修改你的TimerTask代码如下:

timer.schedule(
    object : TimerTask() {
        override fun run() {
            val currentProgress = test?.toFloat()!!
            myCompanion.test8 = currentProgress.toInt()
            // 切换到主线程执行UI操作
            runOnUiThread {
                progress = currentProgress
                textViewTur.text = currentProgress.toString()
            }
        }
    },
    0,
    2000
)
优化建议
  • 将CircularProgressBar的初始化逻辑移到onCreate方法中,和textViewTur的初始化放在一起,避免在工作线程执行findViewById操作
  • 在onDestroy生命周期方法中调用timer.cancel()停止定时任务,避免Activity销毁后定时任务继续运行导致内存泄漏或空指针异常
  • 对服务端返回的test字段增加非空校验,不要直接使用!!强制拆包,避免服务端返回异常时触发空指针崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:36:00