为什么android中的UI视图更新不能放在子线程中

AspireHouse 2009-12-31 03:29:27
为什么android中的UI视图更新不能放在子线程中操作
...全文
624 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyao3857 2011-09-07
  • 打赏
  • 举报
回复
受益了,望多多讨论!
AspireHouse 2009-12-31
  • 打赏
  • 举报
回复
已经解决了,android的UI操作只能放在UI线程中
Handler是个不错的解决的方法
shenxiaolinil 2009-12-31
  • 打赏
  • 举报
回复
public class ClicktextApp extends Activity {
private Thread myRefreshThread = null;
private ClickText ct = null;
protected static final int GUIUPDATEIDENTIFIER = 0x101;

// 自定义Handler 继随自Handler,需要实现handleMessage方法,用以接受消息!
Handler myHandler = new Handler() {
public void handleMessage(Message msg) {//处理消息
switch (msg.what) {
case ClicktextApp.GUIUPDATEIDENTIFIER:
ct.invalidate();// 更新视图UI
break;
}
super.handleMessage(msg);
}
};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ct = new ClickText(this);///////自定义的VIEW
setContentView(ct);
new Thread(new myThread()).start();// 启动线程

}

class myThread implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {

Message message = new Message();// 生成消息,并赋予ID值
message.what = ClicktextApp.GUIUPDATEIDENTIFIER;
myHandler.sendMessage(message);// 投递消息
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}

}
AspireHouse 2009-12-31
  • 打赏
  • 举报
回复

public void run() {
while(progress<100){
progress = progress + 1;
try {
textView.setText(progress+"%");//这边异常
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

异常代码:
Only the original thread that created a view hierarchy can touch its views
shenxiaolinil 2009-12-31
  • 打赏
  • 举报
回复
贴出部分代码看看?
biaozai06 2009-12-31
  • 打赏
  • 举报
回复
得看看SDK中的说明,莫非跟沙盒机制有关?

80,475

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧