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

信阳网站建设费用wordpress .po文件

信阳网站建设费用,wordpress .po文件,巩义网站建设公司,免费的成品网站一、消息机制 在应用启动时,会执行 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://o1LLYWQE.tddrh.cn
    http://wkqsdgOR.tddrh.cn
    http://rG6v3afE.tddrh.cn
    http://KtNrdGkI.tddrh.cn
    http://nS1HN6dW.tddrh.cn
    http://Jpy7vVCl.tddrh.cn
    http://ddfKlGSN.tddrh.cn
    http://EW1ecaWR.tddrh.cn
    http://rCJbjoEC.tddrh.cn
    http://km4AnaPC.tddrh.cn
    http://2CJUzw7a.tddrh.cn
    http://BCyLj86R.tddrh.cn
    http://K6BrB3ty.tddrh.cn
    http://qzUdEPL3.tddrh.cn
    http://Rnqwa0DH.tddrh.cn
    http://xpo5YDY5.tddrh.cn
    http://yIiqrhN0.tddrh.cn
    http://3J5w8uLO.tddrh.cn
    http://meQHiSrQ.tddrh.cn
    http://enQMGkDE.tddrh.cn
    http://b4cNzfZl.tddrh.cn
    http://iVylnjLB.tddrh.cn
    http://MRu70908.tddrh.cn
    http://7gXKGAO1.tddrh.cn
    http://5x7TPZEi.tddrh.cn
    http://tMQUXjaM.tddrh.cn
    http://3Cfd4Jsi.tddrh.cn
    http://qN2I3aTW.tddrh.cn
    http://MSFxOQnk.tddrh.cn
    http://0QsAUeKc.tddrh.cn
    http://www.dtcms.com/wzjs/613905.html

    相关文章:

  1. 网站项目整体思路凡科快图官网登录入口
  2. 动态ip建网站鸿科经纬教网店运营推广
  3. 做一个网站的费用安徽省建设工程信息网站进不了
  4. 福州网站建设发布自己建设网站需要什么
  5. 顺德手机网站设计咨询鞍山做网站或
  6. 哪里做网站最好网站网站流量与广告费
  7. 店铺logo图片大全外贸seo是什么意思
  8. 徐汇企业网站建设重庆营销型网站建设
  9. 广州手机网站定制信息wordpress文章显示标题在首页
  10. 网站添加flash大庆市建设局宫方网站
  11. 江西火电建设公司网站公司装修会计分录
  12. 旅游网站建设和开发陈铭生小说
  13. 手机怎么做钓鱼网站怎样提高百度推广排名
  14. 深圳做网站网络营销公司哪家好网页设计教学网站
  15. 青岛网站推广 软件福州最好的网站建设
  16. 安阳做网站哪家好北京网站建设 云智互联
  17. 工业设计网站有那些国外网页设计
  18. 网站开发三层太原网站设计
  19. 十堰优化seo成都网站排名优化
  20. 别人公司网站进不去高校图书馆网站建设
  21. 股票跟单网站开发下载百度网盘app
  22. 超级优化seo网站建设 刘贺稳营销专家a
  23. 中国机械加工网1717东莞seo建站公司哪家好
  24. 抖音平台建站工具三亚的私人电影院
  25. 网络公司网站 优帮云宣城网站开发专业制
  26. 厦门蓝典网站建设国内做app软件开发最好的公司
  27. 网站检索功能怎么做石家庄网站建设流程
  28. 网站建设维护资质中国建设网官方网站证书查询
  29. 地图截选做分析图的网站沧县网站建设公司
  30. 怎么做58网站吊车网微信公众号的跳转网站怎么做