为什么android中的UI视图更新不能放在子线程中操作
解决方案 »
- Emulator Control调试中文短信
- android下opengl多线程渲染
- 有哪些比较好的Android推送方案
- 在listview或gridview中加载大量图片卡的问题,如何解决内存溢出问题,给点具体方案。
- Activity生命周期问题。
- android应用程序移植到开发板问题
- 一个json解析问题,求指点
- 仿微信的主界面怎样做到左右滑动时,下方的几个button不动,
- 新建的app在清理后台时app没有调用onDestroy()方法,why?
- app在手机上不起作用
- 用aqlitedatabase的query发生nullpointer exception
- ndk sample中自带例子hello-gl2
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
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();
}
}
}
}}
Handler是个不错的解决的方法