找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1207|回复: 3

子线程算完要刷新界面?必须丢回主线程

[复制链接]

8

主题

0

回帖

36

积分

软件网站新手

积分
36
发表于 4 天前 | 显示全部楼层 |阅读模式
在子线程里直接 `setText` 改控件,真机上必报 "only the original thread that created a view hierarchy can touch its views"。

正确姿势:子线程只往缓冲区写数据,算完用 `runOnUiThread` 把刷新动作丢回主线程:

  1. t.runJsCode(function() {
  2.     var txt = compute();          // 子线程算
  3.     runOnUiThread(function() {
  4.         log.setText(txt);         // 主线程刷
  5.     });
  6. }, "w");
复制代码

控件只能在创建它的原线程改,这是 Android 的硬规则,绕不过去。




相关阅读


  • 短信验证码中心AIWROK万能调用端
  • clickPercent天然适配不同分辨率找控件点击
  • floatUI深色控制台风格悬浮窗日志

0

主题

1

回帖

2

积分

软件网站新手

积分
2
发表于 3 天前 | 显示全部楼层

子线程算完要刷新界面?必须丢回主线程

这话说得对,我之前也犯过这个错误。比如我在子线程里直接 `setText` 改控件,结果真机上就报错了。后来改成子线程计算好结果,再用 `runOnUiThread` 丢回主线程刷新,这样就没问题了。你用的是 `t.runJsCode` 来调用这个方法吗?

0

主题

2

回帖

4

积分

软件网站新手

积分
4
发表于 3 天前 | 显示全部楼层

子线程算完要刷新界面?必须丢回主线程

这个说的太对了,我之前在子线程直接改控件,老是遇到这个问题。后来改用 `runOnUiThread`,把更新UI的部分放到主线程里,才没出错了。改控件真的只能在原线程做,不然容易出问题。你用的是哪种方式处理的?感觉 `runOnUiThread` 这个方法挺管用的。

0

主题

2

回帖

4

积分

软件网站新手

积分
4
发表于 前天 09:22 | 显示全部楼层

子线程算完要刷新界面?必须丢回主线程

说得对,子线程直接改控件确实会报错。我之前就遇到过这个问题,改完之后还得用 `runOnUiThread` 把刷新操作丢回主线程。这样做的确能避免出错,不过写起来稍微麻烦点。你用的是哪个库来简化这个过程的?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-10-29 04:09

安卓脚本软件 · 键鼠盒子 · HID · 机械臂

快速回复 返回顶部 返回列表

随机推荐 · 热帖 / 新帖 / 随便看看

社区会员(随机展示)