Android开发者都应该知道的是为了提高用户体验,必须将耗时的操作放在子线程中处理,处理完毕之后发送消息给主线程,刷新UI界面。
那么子线程如何接收消息呢?
这里使用到Looper对象
/**
* 需要用到调用消息队列的方法
* prepare(); 为线程初始化消息队列
* myLooper(); 获取loop对象的引用
* loop(); Looper.loop()调用是让线程消息队列开始运行,可以接受消息
* quit(); 退出消息队列,若线程没有其他操作也会随着消息队列的退出而退出
*/
```loop的API少且简单。现在开始来创建一个用于处理耗时作业的子线程
<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
public class SonThread extends Thread{
private static final String threadTag="WORKING_THREAD";
private Handler sonThreadHandler;
private Looper sonThreadLooper;
@Override
public void run() {
super.run();
Looper.prepare();
sonThreadLooper = Looper.myLooper();
sonThreadHandler = new Handler(sonThreadLooper){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==1){
Log.e("主线程的消息===>", (String) msg.obj);
}
}
};
Looper.loop();
}
//主线程给子线程发送消息
public void sendToSonThread(String message){
if (sonThreadHandler!=null){
Message msg = Message.obtain();
msg.what=1;
msg.obj = message;
sonThreadHandler.sendMessage(msg);
}
}
public void exit(){
//关闭线程
if (sonThreadLooper!=null){
sonThreadLooper.quit();
}
}
}
代码通俗易懂,在子线程中创建消息循环,且创建一个用于操作消息队列中消息的Handler对象。既从消息队列取消息,也用于主线程主动向子线程发送消息。
来看看主线程如何发送消息
son.sendToSonThread("享受技术,享受生活!");