在学handler的时候遇到了一个问题,我还是直接贴代码吧,出错的地方就是在注释的几行class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
bar.setProgress(msg.arg1);
if(msg.arg1 != 100) {
mh.post(myThread);
} else {
//下面3行会导致程序报错
// startBtn.setEnabled(true);
// bar.setVisibility(View.GONE);
// Toast.makeText(HandlerDemo.this, "完成", Toast.LENGTH_SHORT).show();
mh.removeCallbacks(myThread);
}
}
}这个小程序就是点击按钮之后启动一个线程,然后让进度条步进,到100的时候用Toast提示
我在oncreate里new了一个HandlerThread对象然后把对象的looper传给这个MyHandler的内部类,但是运行到ProgressBar到100的时候会出错谁能告诉我一下原因??
public MyHandler() {
}
public MyHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
bar.setProgress(msg.arg1);
if(msg.arg1 != 100) {
mh.post(myThread);
} else {
//下面3行会导致程序报错
// startBtn.setEnabled(true);
// bar.setVisibility(View.GONE);
// Toast.makeText(HandlerDemo.this, "完成", Toast.LENGTH_SHORT).show();
mh.removeCallbacks(myThread);
}
}
}这个小程序就是点击按钮之后启动一个线程,然后让进度条步进,到100的时候用Toast提示
我在oncreate里new了一个HandlerThread对象然后把对象的looper传给这个MyHandler的内部类,但是运行到ProgressBar到100的时候会出错谁能告诉我一下原因??
可以在主线程定义handler hui;
当进度条到100时子线程通过hui.sendMessage叫主线程去更新,而不是子线程直接操作UI。
只有主线程,也就是UI线程才能更新UI(View)。
会出错,我也翻过这个错误,或者用异步处理来解决。
AsychronizedTask 你可以看看sdk.
正确,handler要把消息通知到主线程,由主更新UI
http://blog.csdn.net/stonecao/archive/2011/05/13/6417364.aspx