首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

关于handler的线程通信有关问题

2014-01-13 
关于handler的线程通信问题protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedIn

关于handler的线程通信问题

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progress=0;
progressBar=(ProgressBar)findViewById(R.id.progressbar); 
progressBar.setMax(100);//设置进度条的最大值

new Thread(new Runnable()
{


@Override
public void run() {
Log.e("TAG", "当前的线程是:"+Thread.currentThread().getName());//打印额结果是Thread-28452
// TODO Auto-generated method stub
while(ProgressStatus<=100)
{
ProgressStatus=doSomeWork();
//update the progressbar
handler.post(new Runnable(){
public void run(){
Log.e("TAG", "当前的线程可能是:"+Thread.currentThread().getName());//打印的是main
progressBar.setProgress(ProgressStatus);
}
});
}
//hides the progressbar when the thread gone;
handler.post(new Runnable()
{
public void run()
{
Log.e("TAG", "heh当前的线程可能是:"+Thread.currentThread().getName());//打印的是 main
progressBar.setVisibility(View.GONE);

}


}


);



}



public int doSomeWork()
{
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ++progress;
}

}).start();

}


不太明白,为什么后面两个线程竟然会是main,那个大仙能给点解释呢??
[解决办法]
handler 不都是主线程吗
[解决办法]
使用handler.post()这个方法不是另外开启一个线程的 而是这主线程当中运行 这像是在玩文字游戏
[解决办法]
handler.post(new Runnable)只是把runnable中的run()方法放在当前的线程里执行,而不是去开启另外一个线程。
想异步的话使用HandlerThread这个类

[解决办法]
handler可以更新UI,应该就是运行在Main当中的了吧!当然输出就是主线程了。
[解决办法]
这篇文章讲的挺好的。还有实例。

http://www.cnblogs.com/sipher/articles/2601434.html

热点排行