Android进程和线程 --消息队列模型--Looper (2)(2015-12-02 19:41)
2015-12-03 22:40
531 查看
简介
Looper() 在(1)中已经有了基本的介绍
Looper类:
public final class Looper { static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); private static Looper sMainLooper; final MessageQueue mQueue; final Thread mThread;
Looper.prepare() 生成looper
private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() != null) { throw new RuntimeException("Only one Looper may be created per thread"); } sThreadLocal.set(new Looper(quitAllowed)); }
可以看到新生成的looper是存放在ThreadLocal 对象中的。 ThreadLocal 对象存的作用域是本地线程。详细的请参看ThreadLocal的知识点。
接着使用Looper.loop()来循环去除MessageQueue中的Message进行相应的处理代码如下
public static void loop() { final Looper me = myLooper(); ... final MessageQueue queue = me.mQueue; for (;;) { Message msg = queue.next(); // might block if (msg == null) { // No message indicates that the message queue is quitting. return; } ... msg.target.dispatchMessage(msg); ... msg.recycleUnchecked(); } }
首先获取自身Looper
取出消息队列
for循环中next去除消息
dispatchMessage分派消息
msg.target为handle.
UI线程中的Looper()
准备方法不一样函数名为prepareMainLooper()
public static void prepareMainLooper() { prepare(false); synchronized (Looper.class) { if (sMainLooper != null) { throw new IllegalStateException("The main Looper has already been prepared."); } sMainLooper = myLooper(); } }
调用自身prepare
变量sMainLooper
sMainLooper定义 private static Looper sMainLooper;
可以看到是static变量 全局共享的 并使用sMainLooper指向Looper()
可调用getMainLooper()获取主线程的looper.
主线程和子线程的looper区别
相关文章推荐
- Android 基于google Zxing实现对手机中的二维码进行扫描
- 仿Android6.0联系人列表
- Android快速开发系列 10个常用工具类
- android 事件分发机制
- Android 关于“NetworkOnMainThreadException”解决办法
- 【基于Jsoup】Android_App暴走笑话开发
- Android 的事件分发机制(二)---ViewGroup的事件传递
- Android之项目推荐使用的第三方库
- android NFC开发
- android加载本地文件数据
- Android第三方开源FloatingActionButton(com.getbase.floatingactionbutton)【2】
- android 点击时背景图片 、 文字颜色变换
- Android基础之Activity系列 - Activity间的数据传递
- Android SDK 在线更新镜像服务器资源
- Android集成支付宝
- Android之mvp和mvc对比分析以及实际应用
- Android第三方开源FloatingActionButton(com.getbase.floatingactionbutton)【1】
- Android设置特定时间执行操作
- Android SurfaceView简介
- 短信发送器