曂沅仴駦 发表于 2024-7-28 17:29:45

Android 线程并发:线程通讯:Handler机制

文章目录



[*]

[*]API
[*]源码分析
[*]操作
[*]总结


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

    new Handler();
        
创建Handler,绑定特定线程线程的Looper

new Handler(Looper对象)
  
总结



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android 线程并发:线程通讯:Handler机制