背景
首先,当你有一些需要联网/耗时的任务要做时,不能在主线程中做,这时候就需要采用多线程,也就是把任务分发给其他的线程。
最简单的就是AsyncTask,简单说来就是AsyncTask适用于轻量级简单的异步操作。
封装好的就是用handler了。
有兴趣的自行百度“handler和AsyncTask”
android handler的作用?
下面你的不知道没关系:
HandlerThread包含Thread和Looper(Looper是消息循环)
Looper包含当前Thread和消息队列(MessageQueue)
一个Handler对应一个looper,一个消息对应一个handler。
因为Handler和当前线程和looper关联,looper又控制着这个线程的消息,所以,可以通过外部间接调用handle向消息队列中添加消息——比如obtainMessage()——然后再重写handler的处理函数handlerMessage()来处理别人发过来的消息。
具体来说
新建一个HandlerThread子类,建立一个public函数以供外部调用
重写HandlerThread子类中的onLooperPrepared()方法,在其中new Handler;
重写Handler的handleMessage()真正做事。——有必要时系统会自动调用。
在外部可调用的函数中,Handler对象obtainMessage().sendToTarget(),创建message(其实是从message池取出可用的消息),并且把消息加到线程的消息队列。
补充:
message代表了外部想要该线程想要做的事,Looper包含了一个消息队列,代表了外部想要该线程做的所有事,Handler类的handleMesssage()方法是该线程会怎么做,当安卓发现线程的消息队列还有消息没有处理时,就会自动调用这个函数来处理。