• Looper Handler


    Android 提供了几种供开发者在线程中更新UI的方法,如下:

    • Activity.runOnUiThread( Runnable )
    • View.post( Runnable )
    • View.postDelayed( Runnable, long )
    • Hanlder

    View.post(Runnable)方法。在post(Runnable action)方法里View获得当前线程UI线程Handler然后将action对象postHandler里。在Handler里,它将传递过来的action对象包装成一个MessageMessagecallbackaction),然后将其投入UI线程的消息循环中。在Handler再次处理该Message时,有一条分支(未解释的那条)就是为它所设,直接调用runnablerun方法。而此时,已经路由到UI线程里,因此,我们可以毫无顾虑的来更新UI

     

    Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。

     

    Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。

     

    MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。

     

    Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper

     

     

    主UI线程会默认生成一个Looper和MessageQueue。其它子线程不会生成。

    Looper.prepare();      生成一个Looper

    Looper.loop();         让Looper开始工作,从消息队列里取消息,处理消息。
    Looper.getMainLooper()   返回当前应用程序中主线程的looper

    Looper.myLooper()           返回当前线程中looper

     looper.quit()                    退出此looper

  • 相关阅读:
    MySQL锁概述
    MYSQL删除重复记录
    SPRING事务控制
    性能测试中如何确定并发用户数
    Jsoup操作
    linux根据端口号查询进程
    linux下解压jar文件
    开发阶段的logback.xml
    栈--getMin(leetcode 155)
    git "fatal: The remote end hung up unexpectedly"
  • 原文地址:https://www.cnblogs.com/lianghui66/p/2854404.html
Copyright © 2020-2023  润新知