android学习之handler
Android的UI是单线程(Single-threaded)的。为了避免拖住GUI,一些较费时的对象应该交给独立的线程去执行。如果幕后的线程来执行UI对象,Android就会发出错误讯息 CalledFromWrongThreadException。以后遇到这样的异常抛出时就要知道怎么回事了!
Message(消息): 理解为线程之间交流的信息。发送message信息 更新UI
hander : message(消息)的主要处理着,负责消息的发送sendMessage(Message),和message内容的处理 handleMessage(Message) [主要用于更新UI]
Message Queue(消息队列) : 用于存放handler发布的消息 ,按照先进先出执行 ,
1.每个message queue都会有一个对应的Handler。
2.Handler会向message queue通过两种方法发送消息:sendMessage或post
这两种消息都会插在message queue队尾并按先进先出执行。但通过这两种方法发送的消息执行的方式略有不同:通过sendMessage发送的是一个message对象,会被Handler的handleMessage()函数处理;而通过post方法发送的是一个runnable对象,则会自己执行。
Looper:Looper是每条线程里的Message Queue的管家 Android会自动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。所以调用Looper.getMainLooper()得到的主线程的Looper不为NULL,