在主线程的handler里开子线程 主线程会卡主
来源:互联网 发布:软件测试技术 图片 编辑:程序博客网 时间:2024/05/16 10:05
实现一个在2s双击返回键就退出程序的功能,将延迟放到了handler中。
public void onBackPressed() { Log.i("isfinish",""+is_Finish); if(is_Finish == 0){ Toast.makeText(this,"再按一次返回键退出",Toast.LENGTH_SHORT).show(); is_Finish = 1; Message msg = new Message(); msg.what = FINISH; handler.sendMessage(msg); }else{ finish(); } } Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0: try { Thread thread = new Thread(); thread.sleep(2000); is_Finish = 0; } catch (InterruptedException e) { e.printStackTrace(); } break; default: break; } } };
实验时发现按下返回键后,进程将会卡主直到2s后即handler中thread休眠完才可以操作。
原因是在主线程中启用handler,handler中的looper是主线程的looper,在handler中使用Thread.sleep(1000),也就是相当于在主线程中延迟1000S所以当然会卡顿。
解决方法:使用HandlerThread
handlerThread使用
handler理解
0 0
- 在主线程的handler里开子线程 主线程会卡主
- 在异步线程中使用主线程的handler
- 在子线程中利用主线程的Handler的post()方法
- Handler(3)--在子线程中主线程的 消息队列发送消息
- handler 主线程与子线程之间的通信
- Handler: 主线程如何通知子线程
- Handler: 主线程如何通知子线程
- Handler: 主线程如何通知子线程
- Handler: 主线程如何通知子线程
- Android Handler 主线程 子线程 双向通信
- Handler: 主线程如何通知子线程
- Android Handler 主线程 子线程 双向通信
- Android Handler 主线程 子线程 双向通信
- Handler主线程通知子线程做事
- Android Handler 主线程 子线程 双向通信
- 利用Handler在主线程与子线程之间互发消息,handler详解
- Handler post()等在子线程中更新主线程的UI的方法使用小汇
- Handler详解系列(三)——在子线程中给主线程的消息队列发送消息
- 二叉查找树
- 左链接与内连接的区别、左连接查询的两种查法
- Spring
- 百度在线笔试
- 满足条件的有序表生成
- 在主线程的handler里开子线程 主线程会卡主
- TreeMap类的使用
- AutoCompleteTextView自动提示控件的使用(by 星空武哥)
- [c++]百度笔试题
- spark 协同过滤 (翻译)
- leetcode 41 First Missing Positive
- TreeMap的使用
- HDU - 1159 Common Subsequence
- MySQL中information_schema