博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Handler,Looper,MessageQueue,Message 原理
阅读量:3592 次
发布时间:2019-05-20

本文共 1324 字,大约阅读时间需要 4 分钟。

前置知识

1.Thread的run方法和start方法区别

直接调用run方法,run中的内容并不会另起一个线程运行,只有调用start方法才可以

2.ThreadLocal

ThreadLocal 的get方法会获得 Threadlocal在相应线程set的值。

----------------------------------------------------------------------------------------------------------------------------

1.Looper 这个类内部有一个 

sThreadLocal 的静态成员变量

2.new Handler的时候会在handler内部给mLooper赋值,

mLooper = Looper.myLooper();

最终用的是Looper内部这个静态成员变量的sThreadLocal.get()方法,

3.如果这个sThreadLocal 在当前线程下没有获取到looper,则证明

Looper.prepare()在该线程下没有被调用过

4.这样,每个线程就都有自己的Looper

5.在new Handler 的时候 ,该handler还会获取当前线程先对应的looper的mQueue赋给

handler的成员变量mQueue

6.当调用一个成功创建了的handler 的post 方法时,最终会调用该handler的queue

的enqueueMessage方法 也就是looper的queue的方法,该方法将会把handler作为target变量存入message中

7.Looper.prepare()方法做了两件事

(1)new了一个Looper

new Looper又可以细分为 new 了一个MessageQueue

以及赋值Thread.currentThread()给mThread这个变量

(2)将这个Looperset到Looper类的threadLocal变量中

8.Looper.loop()方法

把queue给运行起来,相当于一个死循环,在不停的从queue中取出来msg

msg将会调用msg的target(即handle)的dispatchMessage方法

该方法最终会调用 handler的handleMessage方法

 

总结  1.Looper.prepare Looper.loop后 ,messagequeue的无限循环就开始了

         2. 该循环从messagequeue中取出message,message再调用其target(Handler)的dispatchMessage方法,

         最终调用handleMessage方法。

 

Handler      Message       MessageQueue        Looper 

自己看源码分析,比看别人写的乱七八糟的文章管用的多。

=========================

拓展:

HandlerThread    自带looper的Thread

ActivityThread     主线程

 

Handler,MessageQueue的这种机制其实就是是生产者,消费者机制

 

转载地址:http://zkgwn.baihongyu.com/

你可能感兴趣的文章
复制带随机指针的链表
查看>>
【SpringMVC】十、SSM整合入门
查看>>
【Dubbo】一、入门概念
查看>>
学习Java Socket网络编程(三)
查看>>
Java方法参数之参数传递方式
查看>>
mysql安装和配置ODBC驱动,然后tableau链接MySQL数据库
查看>>
以项目为导向,助您入门python之网络爬虫-爬取京东商品plus价格低于原价5折的商品(三)
查看>>
物联网之智能灯开发-前言
查看>>
物联网之智能灯-Django(一)
查看>>
使用计算机视觉技术进行工业品质检测
查看>>
Java重要知识点——方法的定义
查看>>
LinkedHashSet的使用
查看>>
HashSet的使用——双色球配对问题
查看>>
JS 整数与罗马数字相互转换(1~3999)
查看>>
主流部署端深度学习框架
查看>>
主流边缘端部署嵌入式平台
查看>>
Spring MVC 国际化和本地化
查看>>
异常处理
查看>>
Spring MVC 扩展及总结
查看>>
SSM 整合配置总结
查看>>