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

打印 上一主题 下一主题

主题 542|帖子 542|积分 1626

文章目录

  



    • 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()方法
  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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表