美文网首页
MessageQueen

MessageQueen

作者: 冰鑫925 | 来源:发表于2017-05-17 16:31 被阅读148次

MessageQueue.IdleHandler可以用来在线程空闲的时候,指定一个操作;有点类似Handler.postDelayed(Runnable r, long delayMillis),都是在将来的某一个时间
执行一个操作。
不过,使用IdleHandler的好处在于可以不用指定一个将来时间,只要线程空闲了,就可以执行它指定的操作。
比较适合那种需要在将来执行操作,但是又不知道需要指定多少延迟时间的操作。

Paste_Image.png

只要使用Looper.myQueue().addIdleHandler(xxx)就可以了。这样,在线程空闲,也就是activity创建完毕之后,它会执行queueIdle里面的代码。
返回值的含义在代码里面注释说明了,
true,表示needKeep,也就是保留,当queueIdle执行完毕之后,不会移除这个IdleHandler
false,表示这个IdleHandler不需要保留,也就是只需要执行一遍。

android里面消息机制的关键在于Looper.loop()方法,因为它把一个简单的线程做成了一个死循环,这样才能保证持续的响应消息。

Paste_Image.png

loop()方法可以看出,它是一个死循环
for(;;){...}

这段代码的关键是 Message msg = queue.next(); // might block
这是去获取下一个消息,从注释可以看出,它是一个可能阻塞的方法,底层是使用epoll机制来实现的,这个暂且不提。
我们继续跟踪queue.next();

Paste_Image.png

底层获取一个消息,nativePollOnce(mPtr, nextPollTimeoutMillis); 这个先不分析。
当获取到消息之后,正常逻辑是得到一个正常的消息,然后返回给Looper去执行这个消息。
但是,如果返回的消息等于null的话,那么就暂时不会返回,而是继续往下面执行
然后,它首先判断pendingIdleHandlerCount的个数,这个IdleHandler就是我们最开始的时候添加的IdleHandler。
如果有IdleHandler的话,就执行。
逐个调用IdleHandler的queueIdle方法,
keep = idler.queueIdle();
然后根据返回值决定要不要keep这个IdleHander,如果返回false,也就是不保留的话,就执行移除IdleHandler的操作,这样下次线程再空闲的时候,就不会调用这个IdleHandler了。

Paste_Image.png

http://bbs.51cto.com/thread-1094228-1.html

![Uploading Paste_Image_172165.png . . .]

相关文章

  • MessageQueen

    MessageQueue.IdleHandler可以用来在线程空闲的时候,指定一个操作;有点类似Handler.p...

  • Handler、Lppoer、MessageQueen

    核心代码在MessageQueen参考:MessageQueen原理Loop代码: 从MessageQueue中获...

  • 俗话说 Handler机制

    Handler Handler, 快递员 MessageQueen 投递站 Looper 理解为报告系统 通过...

  • Handler、Looper、HandlerThread关系梳理

    一、一条核心对应关系: Thread(1):Looper(1):MessageQueen(1):Handler(n...

  • Android消息机制

    handler的运行离不开looper和messagequeen的支持,我们使用looper.prepare(lo...

  • Handler Message Looper

    Handler的创建需要绑定一个Looper对象和Looper对象的MessageQueen,默认调用mLoope...

  • 知识总结

    1.handle的实现原理:handle.sendMessage 在子线程发送一条消息messageQueen 是...

  • handle

    handle:是发送消息,处理消息looper:是轮询消息messageQueen:消息队列程序的启动有个主线程,...

  • Android Handler机制

    Android 使用Handler跨线程通信原理:每一个线程都已一MessageQueen,一个Looper,Lo...

  • Looper相关知识点整理

    1.Looper是什么? Looper在线程间通信中扮演消息循环的角色,不停的从MessageQueen中查看是否...

网友评论

      本文标题:MessageQueen

      本文链接:https://www.haomeiwen.com/subject/atidxxtx.html