本文主要是介绍handler、looper、messagequeue之间的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里先简单的写一个例子,后续会更新一些概念性的东西在里面。因为现在还不太理解这个。
1、只是听讲:handler是负责消息传输,looper负责消息回调,messagequeue是一个存储消息的容器。
2、在子线程中,要想实现消息的传送,需要获得looper对象进行回调。
package com.example.handledemos;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
/**
* handler、looper、messagequeue之间的关系
* handler 是消息的传送机制,looper是回调
* @author lzl
*例子:主线程与子线程中的handler
*/
public class SecondActivity extends Activity{
private Handler handler = new Handler(){ //主线程中发送消息。
public void handleMessage(android.os.Message msg) {
Log.i("主线程", thread.currentThread()+"");
}
};
class MyThread extends Thread{ //子线程中发送消息,需要创建looper
public Handler hande;
@Override
public void run() {
Looper.prepare(); //创建looper实例
hande = new Handler(){
@Override
public void handleMessage(Message msg) {
Log.i("子线程", thread.currentThread()+"");
}
};
Looper.loop(); //产生回调
}
}
private MyThread thread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview1 = new TextView(this);
textview1.setText("hello Handler");
setContentView(textview1);
thread = new MyThread();
thread.start();
try {
thread.sleep(500); //不清楚为什么 必须让子线程睡眠之后,程序才能运行。若不睡眠,程序会崩溃。
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thread.hande.sendEmptyMessage(1);
handler.sendEmptyMessage(1);
}
}
这篇关于handler、looper、messagequeue之间的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!