美文网首页
Android的消息机制概述

Android的消息机制概述

作者: 空山Echo | 来源:发表于2019-10-11 11:12 被阅读0次

    一、Android为什么提供Handler消息机制

    在Android中不允许子线程访问UI,Handler可以解决这个矛盾

    因为Android的UI控件不是线程安全,如果并发访问必然会产生不可预期的状态。
    Handler的主要作用就是将一个任务切换到指定线程中去执行,使用Handler我们就可以把访问UI的任务切换到主线程

    二、简述Handler的工作原理

    1. Handler的运行需要底层MessagQueue和Looper的支撑,
    • MessagQueue:消息队列。采用单链表的数据结构储存消息列表
    • Looper:消息循环。以无限循环的形式去查找是否有新消息,有就处理消息,没有就等待着
    1. 线程是默认没有Looper的,要使用Handler必须要为线程创建Looper

    UI线程即ActivityThread,默认可以使用Handler。因为ActivityThread被创建时初始化了Looper

    1. 那么Handler内部如何获取当前线程的Looper呢?这时候就要使用ThreadLocal
      ThreadLocal的作用:在每个线程中储存数据

    ThreadLocal可以在不同的线程中互不干扰的储存并提供数据,通过ThreadLocal可以轻松获取每个线程的Looper

    1. Handler循环系统创建完毕后,Handler、MessageQueue、Looper就可以协同工作了。通过Handler的send方法将一个Runnable投递到Looper中去处理
    1. 当send方法被调用时,它会调用MessageQueue的enqueueMessage方法将这个消息放在消息队列中
    2. Looper发现有新消息,就进行处理,最终消息中的Runnable或Handler的handleMessage方法被调用
    1. 由于Looper运行在创建Handler的线程中,所以Handler中的业务逻辑就被切换到Looper所在的线程中执行了

    相关文章

      网友评论

          本文标题:Android的消息机制概述

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