handler

在Android中,有两种性质的线程:

  主线程  也叫UI线程,主要作用是处理界面相关的业务

  子线程  Android中的耗时操作(访问网络,I/O操作)不能在主线程进行,因为那样很可能导致界面的卡顿,甚至应用程序崩溃

其中主线程不做耗时操作,子线程不更新UI,从Android3.0开始,系统要求访问网络必须在子线程中进行,否则访问网络失败并抛出android.os.NetworkOnMainThreadException异常,这是为了避免出现ANR(Application Not Responding)现象。

(1)handler是什么?

  handler是Android给我们提供用来更新UI的一套机制

  也是一套消息处理的机制,我们可以发送消息,也可以通过它处理消息

(2)为什么要用handler?可以不用handler吗?

  不行的

  Android在设计的时候,就封装了一套消息创建、传递、处理机制,如果不遵循这样的机制,就没有办法更新UI信息,就会抛出异常

(3)handler的工作原理?

  Handler:负责发送Message到消息队列并且处理Looper分派过来的Message

  Message:负责通信时相关信息的存放和传递

  MessageQueue:负责存储Handler发送过来的Message

  Looper:负责读取MessageQueue中的消息,并将读到的消息交给Handler去处理

        队列中无消息---->Looper将会阻塞

        队列中有消息---->Looper将被唤醒

Thread中包含着Looper,并且只有一个,Looper中包含着MessageQueue,也只有一个,MessageQueue中包含着Message,当然消息是可以多个的

  

原文地址:https://www.cnblogs.com/chen-cai/p/9704132.html