Android之消息处理机制

Android应用程序有两大机制:消息机制和事件处理机制

今天我们来简单谈下消息机制

一、基本元素

Looper:消息管理器,管理Message Queue。

Message:消息

Message Queue:消息队列。

Looper会不断地从MessageQueue中去取消息进行发送到Handler中进行处理(确切是handleMessage中进行处理)


二、创建绑定不同线程的Handler

Handler会与一个线程绑定而且只能与一个线程绑定,在这个线程中,该Handler会有相应的Looper进行取Message,然后发送到handleMessage()去处理。

1、创建主线程的Handler

(1)在主线程中new Handler的自定义子类,如new MyHandler();(MyHandler extends Handler)

在主线程中,自动创建了一个Looper和MessageQueue,而在其他线程中需要手动创建Looper。

(2)在其他线程创建主线程的Handler,

Handler handler = new MyHandler(Looper.getMainLooper());

无需Looper.prepare()和Looper.loop(),因为主线程会自动创建一个Looper和自动循环取Message。

一个线程只能帮到一个Looper对象。

只有在主线程的Looper的Handler才能进行UI操作。

2、创建其他线程的Looper相关的Handler

(1)在非UI线程(主线程),需要手动创建Looper,

OtherHandler mHandler;

Looper.prepare();//创建Looper代码

mHandler = new OtherHandler(Looper.myLooper());//创建于该Handler相绑定的Looper为该线程

Looper.loop();//循环刚创建的该线程的Looper的MessageQueue


进行消息发送

Message msg = Message.obtain();

msg.what = 1;

msg.obj = "XXX";

mHandler.sendMessage(msg);

(2)指定某线程的Looper:

Handler mHandler = new Phandler(AThread.getLooper());


三、重点

重点是理解handler的机制原理,looper在一个线程中不断地进行循环取消息message工作,也就意味着这个线程有某个时刻会被占有执行该handler的相应代码和looper的工作,频繁的发送消息有可能会导致该线程的不堪重负,主线程的话,可能会ANR。所以如果可能会频繁发送消息的情形应该放在子线程进行。

而掌握API则可以查询相关的手册。



今天的分享就到这里,谢谢。

猜你喜欢

转载自blog.csdn.net/u010375903/article/details/79336784