美文网首页
安卓消息机制

安卓消息机制

作者: killerbee | 来源:发表于2020-08-06 01:48 被阅读0次

1:安卓系统通过handler来发送消息,主要作用是为了更新UI,或者执行一些逻辑操作

2:安卓消息机制通过handler,message,messagequeu,looper 来实现

3:关于handler:

(1)handler的作用是将message发送到messageQueue中去,同时将自己的引用赋值给message的target

(2)不可以在子线程中使用handler的无参构造方法,因为handler在绑定的时候需要一个looper对象,有两种方法可以绑定

    looper.prepar();

    Handler handler=new Handler();

    Looper.loop();

    或者通过构造方法传入一个looper;

    Looper looper=....

    Handler handler=new Handler(looper);

    (3):Handler有哪些发送消息的方法           

     sendMessage(Messagemsg)

     sendMessageDelayed(Messagemsg,longuptimeMillis)

    post(Runnabler)

    postDelayed(Runnabler,longupti    meMillis)

    sendMessageAtTime(Messagemsg,longwhen)

    sendEmptyMessage(intwhat)

    sendEmptyMessageDelayed(intwhat,longuptimeMillis)

    sendEmptyMessageAtTime(intwhat,longwhen)

4:   关于Looper:

  (1)looper的作用是将message从MessageQueue中取出来,并将其交给Handler#dispatchMessage(Message) 方法

(2)Looper 是如何与 Thread 关联的:

    Looper 与 Thread 之间是通过 ThreadLocal 关联的,这个可以看 Looper#prepare() 方法

    private static void prepare(boolean quitAllowed){

    if(sThreadLocal.get()!=null){

        throw newRuntimeException("Only one Looper may be created per thread");    

    }

    sThreadLocal.set(newLooper(quitAllowed));

    }    

(3)Looper.loop() 方法是一个死循环为什么不会阻塞APP

5:关于MessageQueue:

(1)MessageQueue的作用是负责message的插入和取出

 (2)messageQueue是有序的链式结构,排序的依据是Message#when字段

       Message#when 是一个时间,用于表示 Message 期望被分发的时间,该值是 SystemClock#uptimeMillis() 与 delayMillis 之和。

SystemClock#uptimeMillis() 是一个表示当前时间的一个相对时间,它代表的是自系统启动开始从0开始的到调用该方法时相差的毫秒数

    Message#when 为什么不用 System.currentTimeMillis() 来表示

System.currentTimeMillis()代表的是从1970-01-01 00:00:00到当前时间的毫秒数,这个值是一个强关联系统时间的值,我们可以通过修改系统时间达到修改该值的目的,所以该值是不可靠的值。

比如手机长时间没有开机,开机后系统时间重置为出厂时设置的时间,中间我们发送了一个延迟消息,过了一段时间通过 NTP 同步了最新时间,那么就会导致延迟消息失效

同时Message#when只是用时间差来表示先后关系,所以只需要一个相对时间就可以达成目的,它可以是从系统启动开始计时的,也可以是从APP启动时开始计时的,甚至可以是定期重置的(所有消息都减去同一个值,不过这样就复杂了没有必要)。

相关文章

  • Android——Handler机制

    什么是安卓消息处理机制? 消息机制本质:一个线程开启循环模式持续监听并依次处理其他线程给他发来的消息。 安卓消息机...

  • 安卓消息机制

    1:安卓系统通过handler来发送消息,主要作用是为了更新UI,或者执行一些逻辑操作 2:安卓消息机制通过han...

  • 安卓消息机制详解

    写在前面的话 提起安卓的消息机制,我们马上就会联想到Handler,而Handler在日常的开发中经常会用到,因此...

  • 解析安卓消息机制

    我们都知道,系统是不允许在子线程中访问UI的,但如果在主线程中进行耗时操作,又会极大地妨碍用户体验。所以,我们可以...

  • Handler机制原因,主线程looper.loop()为什么不

    Handler,Message,looper 和 MessageQueue 构成了安卓的消息机制,handler创...

  • Handler机制(一)

    安卓的异步消息处理机制就是handler机制。 主线程,ActivityThread被创建的时候就会创建Loope...

  • 谈谈ThreadLocal

    做安卓的同学想必,一提到ThreadLocal会首先想到安卓中大名鼎鼎的handler消息机制,或许也大概是从了解...

  • Android异步消息机制-深入理解Handler、Looper

    Android异步消息机制-深入理解Handler、Looper和MessageQueue之间的关系 相信做安卓的...

  • Message

    Messeage 是安卓消息机制中,消息的实体,表示需要处理的消息内容; 本文介绍两部分:1. 消息的构成2.消息...

  • 安卓异步消息处理机制

    安卓中的异步消息处理机制主要有四个部分:Message、Handler、MessageQueue、Lopper下面...

网友评论

      本文标题:安卓消息机制

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