美文网首页
android消息机制学习笔记

android消息机制学习笔记

作者: sun_goden | 来源:发表于2016-12-11 21:33 被阅读0次

    学习资料 《Android开发艺术探索》

    Android的消息机制主要指Handler的运行机制。

    产生的原因:

    Android的主线程就是ui线程,多线程访问ui会造成ui控件不安全,并发访问可能会导致UI控件处于不可预期的状态

    加锁的缺点:

    首先会让UI访问变得复杂,其次降低UI访问的效率(锁机制会阻塞某些线程的执行)

    最后:

    最简单高效的方式就是采用单线程来进行UI操作

    Hnadler运行的条件:

    底层MessageQueue和Looper的支撑。

    Paste_Image.png
    Looper的工作原理

    Lopper在android消息机制中扮演着消息循环的角色,他会不停的从MessageQueue中查看是否有新的消息,如果有新的消息就会处理,否则一直处于阻塞状态。

    Loopeer的构造方法

    首先创建一个MessageQueue(消息队列Looper的prepare方法创建一个Looper,loop()开启消息循环)
    然后保存当前线程

    Looper的重要性

    Handler工作需要looper(没有looper会报错)
    主线程也是需要Looper的(prepareMainLooper方法给ActivityTread创建Looper)
    通过Looper提供的getMainLooper方法,可以在任何地方获取到主线程
    Looper的退出(建议在不需要的时候终止looper)
    quit(直接退出looper)和quitSafely(设置退出标记,再把消息处理完毕后安全退出)来退出一个Looper。

    Looper的loop方法源码实现

    Loop是一个死循环,跳出的唯一方式就是MessageQueue等于null。
    Looper的next方法是获取新的消息,没有消息就会阻塞在哪里

    Handler的工作原理

    工作内容:发送(POST和send一系列方法)和接收消息
    Handler发送的源码解析
    向消息队列中插入一条消息
    消息队列的next方法返回这条消息给Looper,looper收到消息开始处理
    Looper把消息交给Handler处理

    Hanler处理消息

    dispatchMessage方法调用(判断callback是否为null,不为nul通过handlerCallback处理消息)

    Paste_Image.png Paste_Image.png
    主线程的消息循环

    前面已经说过ActivityThread也是通过Looper的prepareMainLoope方法来创建主线程的Looper和MessagQueue,并且通过Looper的loop方法开启消息循环
    主线程的消息队列把消息交给主线程的Handler(ActivityThread.H),其中包含四大组件的启动和停止

    本人很菜,还在学习中,如有错误,欢迎指正留言。

    相关文章

      网友评论

          本文标题:android消息机制学习笔记

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