Handler 的源码在前面几章分析过,一般也被用于切换线程,刷新UI使用。也被用来做延迟处理事件,一般都是在主线程中使用。
根据业务逻辑,开启了子线程,在其中做耗时操作,同时设置了一个超时时间,如果超过了这个时间,则终止操作,进行下一步逻辑。 这是一个很简单的需求,但由于笔误,造成了一个bug,原因在于Handler的延时操作不是在主线程中执行,而是在子线程中,见代码
Handler mHandler;
void test(){
HandlerThread handlerThread = new HandlerThread("test", -20);
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper(), callback);
mHandler.sendEmptyMessage(0);
}
Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if(msg.what == 1){
Log.e("TAG", " handler time out " );
&nbs

本文探讨了Android中Handler在子线程中使用时遇到的延迟消息问题。当子线程被阻塞时,Handler的延迟消息并不会准时执行,而是要等到子线程释放后才能处理。分析了Handler、Looper和MessageQueue的工作原理,解释了为何在子线程中使用Handler进行延迟操作可能导致预期外的行为,并给出了相应的问题修复建议。
最低0.47元/天 解锁文章
801

被折叠的 条评论
为什么被折叠?



