在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,当然消息是可以多个的