android消息机制之理解Looper
来源:互联网 发布:黄磊i知乎 编辑:程序博客网 时间:2024/06/05 14:15
Looper对象是线程的消息循环处理器,每个线程只能有一个Looper对象。Looper内部有一个消息队列MessageQueue,所有线程的消息都存放在这个队列中。新创建一个线程时,系统并不会马上为这个线程创建一个Looper对象,需要程序自己创建。Android在启动时,为主线程创建一个Looper对象。
Looper类的主要成员变量和方法:
public final class Looper{static final ThreadLocal<Looper> sThreadLocal=new ThreadLocal<Looper>();//通过将需要保存的对象和线程id关联在一起的方式实现了线程本地存储的功能private static Looper sMainLooper; //主线程looperfinal MessageQueue mQueue;//消息队列final Thread mThread;private static void prepare(boolean quitAllowed){...}//创建looper实例 public static void prepareMainLooper(){...} //创建主线程looper对象public static Looper getMainLooper(){...}//返回主线程的Looper对象public static void loop(){....} //循环}每个线程只能有一个Looper类的实例对象,并把它保存在 ThreadLocal中,如果一个线程中多次调用prepare()方法将会抛出异常。
private static void prepare(boolean quitAllowed){if(sThreadLocal.get()!=null){throw new RuntimeException(“...”);}sThreadLocal.set(new Looper(quitAllowed));}
创建主线程的代码在Framework中,应用层不能直接取得主线程的Looper对象。因此,Android将获得主线程Looper对象的方法放在了Looper类中:
public static Looper getMainLooper(){synchronized(Looper.class){ //这里使用synchronized进行同步处理,防止两个线程同时获取主线程的looper。return sMainLooper;}}接下来我们再看loop()方法
public static void loop(){final Looper me=myLooper();....final MessageQueue queue=me.mQueue;...for(;;){Message msg=queue.next();//取一条消息,没有消息会阻塞if(msg==null){return; //msg等于null表示接到了退出的请求}....msg.target.dispatchMessage(msg);//分发消息....msg.recycleUnchecked();}}loop()中使用无限for循环从消息队列中读取数据,如果没有消息则阻塞,如果msg==null则退出,否则分发消息。
阅读全文
0 0
- android消息机制之理解Looper
- Android消息机制之Looper
- Android消息机制之Looper和Handler
- Looper详解--Android消息机制之4
- Looper详解--Android消息机制之4
- Android消息机制之Looper、Handler、MessageQueen
- 消息机制之Looper
- 谈谈我对Android中的消息机制的理解之Handler,Looper和MessageQueue的解释
- Android 异步消息处理机制 深入理解 Looper、Handler、Message
- Android消息机制理解(Handler、Looper、MessageQueue)
- Android异步消息处理机制之looper机制
- Android异步消息处理机制之looper机制续
- android消息处理机制-------Looper
- Android消息机制之一---Looper
- android消息处理机制--Looper
- Android消息机制之四---Looper,Handler,Message例子
- Android 消息机制之 handler、messageQueue、looper深入剖析
- Android异步消息处理机制之Handler、Looper、Message
- 网易2016招聘<路灯>Java代码
- node.js部署之启动后台运行 forever
- 超大数据量排序
- 22---加密解密原理及openssl
- 超过一定字数 现实为 “更多”
- android消息机制之理解Looper
- ServletContextListener使用详解
- bower安装入门
- 特色班级聚会
- 织梦当前栏目样式不同的解决方法
- c++输入函数
- 安装EJBCA的打印信息
- 光标 换为 自定义图片
- shiro-helloworld(2)