主線程給主線程發送消息:
public class mainSendToMain extends Activity {
private Button btnTest;
private TextView textView;
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnTest = (Button)this.findViewById(R.id.btn_01);
textView = (TextView)this.findViewById(R.id.view_01);
btnTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Looper looper = Looper.getMainLooper();
//
getMainLooper()方法是返回
主線程的Looper對象
//這里以主線程的Looper對象創建了handler,
//所以,這個handler發送的Message會被傳遞給主線程的MessageQueue。
handler = new MyHandler(looper);
//構建Message對象
//第一個參數:是自己指定的message代號,方便在handler選擇性地接收
//第二三個參數是傳遞的整型值,對內存消耗較少
//第四個參數需要封裝的對象
Message msg = handler.obtainMessage(1,2,3,"主線程發消息了");
handler.sendMessage(msg); //發送消息
}
});
}
class MyHandler extends Handler{
public MyHandler(Looper looper){
super(looper);
}
public void handleMessage(Message msg){
textView.setText("我是主線程的Handler,收到了消息:"+msg.obj);
}
}
其他線程給自己發送消息:
public class otherSendToIts extends Activity{
private Button btnTest;
private TextView textView;
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnTest = (Button)this.findViewById(R.id.btn_01);
textView = (TextView)this.findViewById(R.id.view_01);
btnTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//啟動線程
new MyThread().start();
}
});
}
class MyHandler extends Handler{
public MyHandler(Looper looper){
super(looper);
}
public void handleMessage(Message msg){
super.handleMessage(msg);
textView.setText((String)msg.obj);
}
}
class MyThread extends Thread{
public void run(){
Looper.prepare();
//創建該線程的Looper對象
handler = new ThreadHandler(Looper.myLooper());
//這里Looper.myLooper()獲得的就是該線程的Looper對象了
Message msg = handler.obtainMessage(1,1,1,"我自己");
handler.sendMessage(msg);
Looper.loop();
}
//定義線程類中的消息處理類
class ThreadHandler extends Handler{
public ThreadHandler(Looper looper){
super(looper);
}
public void handleMessage(Message msg){
//這里對該線程中的MessageQueue中的Message進行處理
//這里我們再返回給主線程一個消息
//加入判斷看看是不是該線程自己發的信息
if(msg.what == 1 && msg.obj.equals("我自己")){
handler = new MyHandler(Looper.getMainLooper());
Message msg2 = handler.obtainMessage(1,1,1,"稟告主線程:我收到了自己發給自己的Message");
handler.sendMessage(msg2);
}
}
}
}
}
其他線程給主線程發送消息:
public class otherSendToMain extends Activity{
private Button btn;
private TextView textView;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.btn_01);
textView = (TextView) findViewById(R.id.view_01);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new MyThread().start();
}
});
}
class MyHandler extends Handler{
public MyHandler(Looper looper){
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
textView.setText("我是主線程的Handler,收到了消息:"+(String)msg.obj);
}
}
class MyThread extends Thread{
public void run(){
Looper looper = Looper.getMainLooper();
handler = new MyHandler(looper);
Message message = handler.obtainMessage(1,2,3,"其他線程發消息了");
handler.sendMessage(message);
}
}
}
主線程給其他線程發送消息:
public class mainSendToOther extends Activity {
Button button3;
TextView textView;
Looper mainLooper;
// 其它線程
OtherHandler otherHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button3 = (Button) findViewById(R.id.btn_01);
textView = (TextView) findViewById(R.id.view_01);
button3.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Message msg =otherHandler.obtainMessage(1,"這是主線程發送的消息");
otherHandler.sendMessage(msg);
}});
MyThread thread = new MyThread();
thread.start();
}
class MyThread extends Thread
{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
//創建該線程的Looper對象,用於接收消息
Looper.prepare();
//線程的looper創建的handler表示消息接收者是子線程
otherHandler = new OtherHandler(Looper.myLooper());
//循環從MessageQueue中取消息。
Looper.loop();
}
}
class OtherHandler extends Handler
{
public OtherHandler() {
// TODO Auto-generated constructor stub
}
public OtherHandler(Looper looper) {
// TODO Auto-generated constructor stub
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
mainHandler = new MainHandler(Looper.getMainLooper());
Message message = new Message();
message.obj="子線程收到消息";
mainHandler.sendMessage(message);
}
}
MainHandler mainHandler;
class MainHandler extends Handler
{
public MainHandler() {
// TODO Auto-generated constructor stub
}
public MainHandler(Looper looper) {
// TODO Auto-generated constructor stub
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
textView.setText("我是主線程,這是收到的消息:"+msg.obj);
}
}
}
