ToB企服应用市场:ToB评测及商务社交产业平台

标题: Android 线程并发:线程通讯:Handler机制 [打印本页]

作者: 曂沅仴駦    时间: 2024-7-28 17:29
标题: Android 线程并发:线程通讯:Handler机制
文章目录

  
  
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()方法
  1. public void run() {
  2.     mTid = Process.myTid();
  3.     Looper.prepare();
  4.     synchronized (this) {
  5.         mLooper = Looper.myLooper();
  6.         notifyAll();
  7.     }
  8.     Process.setThreadPriority(mPriority);
  9.     onLooperPrepared();
  10.     Looper.loop();
  11.     mTid = -1;
  12. }
复制代码

操作

自定义Thread实现Looper循环

  1.     Looper.prepare();
  2.     Looper.loop();
复制代码

创建Handler,绑定当前线程的Looper


  1.     new Handler();
复制代码

        
创建Handler,绑定特定线程线程的Looper


  1. new Handler(Looper对象)
复制代码

  
总结



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4