Android就业面试技巧系列-技术篇6 (Handler机制)
来源:互联网 发布:独立思考 知乎 编辑:程序博客网 时间:2024/06/07 01:30
Android就业面试技巧系列-技术篇(Handler机制)
带入Handler机制:
Handler是线程间通讯的机制,Android中,网络访问、文件处理等耗时操作必须放到子线程中去执行,否则将会造成ANR异常。
ANR异常:Application Not Response 应用程序无响应
产生ANR异常的原因:在主线程执行了耗时操作,对Activity来说,主线程阻塞5秒将造成ANR异常,对BroadcastReceiver来说,主线程阻塞10秒将会造成ANR异常。
解决ANR异常的方法:耗时操作都在子线程中去执行
但是,Android不允许在子线程去修改UI,可我们又有在子线程去修改UI的需求,因此需要借助Handler。
Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
Message Queue(消息队列):用来存放线程放入的消息。
线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
UI线程创建时,就创建了一个Looper,Looper内部维护这一个MessageQueue。
Looper通过开启一个while(true)死循环来轮询MessageQueue中的Message。
当Looper轮询到Message时,就分发此Message。
Handler在子线程发送消息到MessageQueue,Message被Looper取出来后,分发给handler的handleMessage方法来处理。
那么,为什么说一个Looper可以对应多个Handler,Looper如何保证哪个Handler发出去的Message将交由哪个handler来处理?
因为Handler在发送Message的时候,在Message的成员变量target上标记了当前handler的引用:
message.target = this; this即这个发送此Message的handler对象
当Looper取到message时,通过下面的方法分发Message:
message.target.dispatchMessage(message);
message.target即发送此Message的handler对象
因此,哪个handler发送的Message,将由哪个Handler来处理此Message。
阅读全文
0 0
- Android就业面试技巧系列-技术篇6 (Handler机制)
- Android就业面试技巧系列-技术篇9 (AsyncTask和Handler区别)
- Android就业面试技巧系列-技术篇4(MVP)
- Android就业面试技巧系列-技术篇7 (ListView优化)
- Android就业面试技巧系列-技术篇8 (Volley框架)
- Android就业面试技巧系列-技术篇10 (图片OOM)
- Android就业面试技巧系列-技术篇11 (支付相关)
- Android就业面试技巧系列-技术篇12 (消息推送)
- Android就业面试技巧系列-技术篇1(内存优化)
- Android就业面试技巧系列-技术篇2(百度地图)
- Android就业面试技巧系列-技术篇3(屏幕适配)
- Android就业面试技巧系列-技术篇5 (WebView和JS交互)
- android面试-Handler机制(oppo面试)
- Handler消息机制--面试篇
- Android开发技术-Handler机制与原理
- [面试相关] iOS开发就业面试技巧
- Android Handler机制(高级篇)
- Android面试准备 第一天 第一例 Handler机制
- Java 多线程断点下载实现思路
- 多线程查询
- 【Shader实战篇】四大渲染模式之镂空实现格子窗户
- 微信小程序 自动换行
- HDU4850 Wow! Such String! —— 字符串构造
- Android就业面试技巧系列-技术篇6 (Handler机制)
- 使用渐变色gradient完成颜色
- 【ML笔记】第三章 线性模型
- 最全三大框架整合(使用映射)——Dept.java
- 物体运动框架
- Shader案例篇二《镜子2》
- poj1474(半平面交)
- Android就业面试技巧系列-技术篇7 (ListView优化)
- 2017第八届浪潮杯山东省赛 K题 codeforces 贪心+背包