android handler调用post方法阻塞

Posted 星辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android handler调用post方法阻塞相关的知识,希望对你有一定的参考价值。

1.试下用postDelayed(Runnable a, int time),因为post把消息放到Looper中就返回,但Looper中没有其他消息又会被立刻取出来执行,这样就有可能做了run中的操作,而没有及时刷新按钮.

2.另外,这种做法耗时操作仍然是由UI线程去做了。。而不是你想的另起了线程。。
建议最好用下面的方法:
定义一个线程。
class MyThread extends Thread{
Handler mHandler;
Boolean boo;
public MyThread(Handler handler){
mHandler = handler;
}
public void setBoo(boolean b) {boo = b; }
publid void run(){
if(boo){
getWeatherInfo();//耗时操作
analyzing();//耗时操作
mHandler.post(new Runnable() {
public void run() {
setWeather();//更新UI
}
);//更新UI
boo = true;
}
}
}

在处理单击事件时:
sureButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
setBoo(true);
myThread.start();
}
});

在activity中:
MyThread myThread = new MyThread(mHandler);

以上是关于android handler调用post方法阻塞的主要内容,如果未能解决你的问题,请参考以下文章

Android异步消息机制

Android线程销毁

Android开发学习之路-Handler消息派发机制源码分析

Android Handler类 发送消息-post()和postDelay(), Looper讲解

万人收藏!关于Android Handler源码解析,看这一篇就够了!

Android中为什么主线程不会因为Looper.loop()方法造成阻塞