出于性能优化考虑,Android的UI线程操作并不是安全的,也就是说,几个线程同时操作UI可能会导致线程安全问题,为了解决这个问题,android规定只有UI线程也就是主线程才能修改UI界面,那么当其他线程想要改变UI线程该怎么做呢?这时候就需要Handler消息传递机制。。。
原料: Handler类,MessageQueue类,Looper类
Looper : 每一个类至多只有一个Looper,他负责管理 MessageQueue,会不断将MessageQueue中的消息往Handler分发(消息分发靠的是loop()函数)
构造函数如下:
private Looper() {
mQueue = new MessageQueue();
mRun = true;
mThread = Thread.getCurrentThread();
}
private意为着不能直接new该对象,也就是说想要new该对象必须调用Looper,prepare()方法。
MessageQueue:由Looper管理的储存消息的队列。
Handler:负责往对应的Looper管理的MessageQueue发送消息,也负责处理Looper分发过来的消息。
注意:因为在主线程中系统已经初始化了一个Looper,所以并不需要new相关的Looper及其相关的函数。
在非主线程中使用Handler步骤:
1. 调用Looper的prepare()函数为当前线程创建一个Looper对象(它的构造器会自动创建相关的MessageQueue)
2.创建Handler子类的实现,重写其handlerMassage()方法,这个方法是负责处理传过来的信息的
3.调用Looper.loop()方法启动Looper;
android消息传递机制---handler
最新推荐文章于 2024-08-12 21:39:45 发布