当前位置: 首页 > wzjs >正文

网络班级网站建设国际军事新闻今日头条

网络班级网站建设,国际军事新闻今日头条,wordpress中修改链接地址,免费的cms有哪些平台一、消息机制 在应用启动时,会执行 main() 方法, main() 会创建一个 Looper 对象,然后开启一个死循环,目的是不断从 消息队列 MessageQueue 里面取出 Message 对象并处理。 在Android中使用消息机制,会优先想到的是Handler。Handler可以轻松的将一个任务切换到Handler所在…

一、消息机制

        在应用启动时,会执行 main() 方法, main() 会创建一个 Looper 对象,然后开启一个死循环,目的是不断从 消息队列  MessageQueue 里面取出 Message 对象并处理。

        在Android中使用消息机制,会优先想到的是Handler。Handler可以轻松的将一个任务切换到Handler所在的线程去执行。在多线程的应用场景中,可以将工作线程中需要更新UI的操作信息传递到主线程去执行,从而实现工作线程更新UI的操作,最终实现异步消息的处理。

二. Handler机制模型

消息机制主要包含Handler、Message、MessageQueue,Looper这四个类。

  • Handler:消息辅助类。主要功能将 Message 对象发送到 MessageQueue 中,同时将自己的引用赋值给 Message#target (Handler.sendMessage())。也可以实现 handleMessage() 方法处理回调。

  • Message:消息实体。需要传递的消息也可以传递数据。

  • MessageQueue:消息队列。**内部实现并不是队列,而是利用单链表去实现因为在插入和删除数据有优势。**用于存储Handler发给来的消息( Message )以及取出。 内部使用单链表实现 

  • Looper:与线程绑定,不止局限于主线程,绑定的线程来处理 Message 。不断循环执行 Looper.loop() ,从 MessageQueue 中读取 Message ,按分发机制将消息分发出去给目标处理(将 Message 发到 Handler.dispatchMessage 方法去处理)。

三、Handler运行流程

工作流程: 异步通信准备==>消息入队==>消息循环==>消息处理

1.异步通信准备

假定在主线程创建Handler,则会直接在主线程中创建 Looper , MessageQueue 和 Handler 对象。Looper和MessageQueue对象均属于其 创建线程 (由主线程创建则属于主线程)。创建 Looper 时会自动创建 MessageQueue 对象,创建好 MessageQueue 对象后, Looper 自动进入循环。 Handler 自动绑定 Looper 以及 MessageQueue 。

 Looper 对象的创建方法一般通过 Looper.prepareMainLooper() 和 Looper.prepare() 方法。

2.消息入队

工作线程通过 Handler 发送 Message 到 MessageQueue 中。消息内容一般是UI操作,通过 Handler.sendMessage(Message message) 或 Handler.post(Runable r) 发送。加入 MessageQueue 一般通过 MessageQueue.enqueueMessage(Message msg,long when) 操作。

3.消息循环

分为消息出队和消息分发两个步骤

  • 消息出队: Looper 从 MessageQueue 中循环取出 Message 

  • 消息分发: Looper 将取出的 Message 分发给创建消息的 Handler 

消息循环过程中, MessageQueue 为空,则线程堵塞

4.消息处理

 Handler 接受发过来的 Message 并处理。

四、Handler源码解析

1. 创建循环器对象( Looper )和创建消息队列对象( MessageQueue )

创建Looper对象主要有两个方法: Looper.prepareMainLooper() 和 Looper.prepare() 

创建MessageQueue对象方法:创建Looper对象时会自动创建MessageQueue

// 源码位置:../core/java/android/os/Looper.javafinal MessageQueue mQueue;
final Thread mThread;
//Looper对象创建时会自动创建一个MessageQueue对象。
private Looper(boolean quitAllowed) {mQueue = new MessageQueue(quitAllowed);mThread = Thread.currentThread();}//为当前线程(子线程)创建一个Looper对象 需要在子线程中主动调用该方法
public static void prepare() {prepare(true);}private static void prepare(boolean quitAllowed) {//判断sThreadLocal是否为null,不为空则直接跑出异常 可以保证一个线程只可以调用一次prepare方法if (sThreadLocal.get() != null) {throw new RuntimeException("Only one Looper may be created per thread");}sThreadLocal.set(new Looper(quitAllowed));}//为主线程创建一个Looper对象 该方法会在主线程创建时自动调用
public static void prepareMainLooper() {prepare(false);synchronized (Looper.class) {if (sMainLooper != null) {throw new IllegalStateException("The main Looper has already been prepared.");}sMainLooper = myLooper();}}

    1. 创建Looper对象时会自动创建MessageQueue对象

    2.主线程的Looper对象是自动生成的,而子线程需要调用Looper.prepare()创建Looper对象

    创建主线程是调用了ActivityThreadmain()方法。

    然后按照流程调用了Looper.prepareMainLooper()Looper.loop()。所以主线程不需要调用代码生成

    Looper对象。

    3.Handler的主要作用是( 在主线程更新UI ),所以Handler主要是在主线程创建的。

    4.Looper与Thread是通过 ThreadLocal 关联的。由于 ThreadLocal 是与线程直接关联的,

    参考 prepare() 。

    5.子线程创建Handler对象:无法在子线程直接调用Handler无参构造方法Handler创建时需要绑定Looper对象 。需要使用 HandlerThread 。

    //源码位置: ../core/java/android/app/ActivityThread.javapublic static void main(String[] args) {...Looper.prepareMainLooper();Looper.loop();...}

    2.开启Looper即消息循环

            创建了 Looper和MessageQueue 

    http://www.dtcms.com/wzjs/7764.html

    相关文章:

  1. 做网站需要办什么证件公司推广宣传文案
  2. 如何做房产网站百度推广登录后台登录入口
  3. dede网站头部和底部不能调用北京网站建设优化
  4. 企业网站内容运营点击器 百度网盘
  5. 家庭农场网站建设深圳网站设计小程序
  6. 网址2021年免费不封直接看seo查询5118
  7. 营销型企业网站建设与推广百度推广有用吗
  8. 网页模板网站模板免费网站推广工具
  9. 南康建设局官方网站网站 推广
  10. 个人做营利性质网站会怎么样服务网站推广方案
  11. 门户网站的建设与维护企业管理培训班哪个好
  12. 专门代做毕设的网站临沂森拓网络科技有限公司
  13. 凡科互动小程序破解无线网络优化工程师
  14. 宜春网站建设推广百度代理推广
  15. win10做的网站其他电脑访问不了怎么办百度河南代理商
  16. 如何做网站登录界面社会新闻最新消息
  17. 衡阳专业seo公司众志seo
  18. 沈阳优化网站公司seo整站优化技术培训
  19. 大气网站首页直播回放老卡怎么回事
  20. 政府网站建设联系电话网络营销包括几个部分
  21. 网站如何做优化搜狗seo刷排名软件
  22. 找做网站全网推广网站
  23. 绍兴网站建设方案服务百度域名注册查询
  24. 做互助盘网站找哪家好什么是seo技术
  25. 经典网站建设案例郑州网站建设最便宜
  26. 网站建设导航栏今天百度数据
  27. 政府网站建设指标html网页制作网站
  28. 搜索网站程序百度网站提交收录入口
  29. 富阳区建设局网站媒体平台
  30. 做调查用哪个网站郑州关键词优化费用