文章目录
API
Handler相关
Handler对象.sendMessage(Message)
发送消息
Handler对象.handleMessage()空方法
自定义Handler重写handleMessage方法,处理Message
Looper相关
Looper.getMainLooper()
获取App的UI线程的Looper对象
Looper.prepare()
创建Looper对象
Looper.loop()
开启死循环
Looper.myLooper()
获取当前线程的Looper对象
Looper.myQueue() /Looper对象.getQueue()
获取MessageQueue对象
Looper对象.getThread()
获取Thread对象
HandlerThread
HandlerThread对象.getLooper()
获取HandlerThread对象对应的Looper对象
源码分析
Looper、MessageQueue、Handler的类关系
一个Thread对应一个Looper
一个Looper对应一个MessageQueue
一个MessageQueue对应多个Handler
Handler负责
1.向MessageQueue添加Message
Handler.sendMessage
2.保存Message对应的处理代码
Handler.handleMessage()
MessageQueue负责存储Message
Looper负责死循环MessageQueue
从MessageQueue获取Message,在对应线程中执行Message对应的Handler保存的处理代码
Looper
持有一个ThreadLocal<Looper>的静态对象sThreadLocal,用于保证一个线程持有一个Looper对象
持有一个MessageQueue对象mQueue
HandlerThread
继承Thread, 重写run()方法
- public void run() {
- mTid = Process.myTid();
- Looper.prepare();
- synchronized (this) {
- mLooper = Looper.myLooper();
- notifyAll();
- }
- Process.setThreadPriority(mPriority);
- onLooperPrepared();
- Looper.loop();
- mTid = -1;
- }
复制代码
操作
自定义Thread实现Looper循环
- Looper.prepare();
- Looper.loop();
复制代码
创建Handler,绑定当前线程的Looper
创建Handler,绑定特定线程线程的Looper
总结
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |