handler通信机制

时间:2024-04-13 08:37:43
 package com.example.gp08_day26_handler3;

 import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View; /**
* 主线程给子线程发消息
* @author qq
*
*/
public class MainActivity extends Activity { private Handler handler;//需要在子线程中实例化
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void sendMessage(View v)
{
//点击按钮给子线程发消息
Message msg = Message.obtain();
msg.obj ="hello,你好!";
//把Message对象放入handler内部的MessageQueue对象,而handler内部的MessageQueue引用指向的是 Looper中的MessageQueue
handler.sendMessage(msg);
}
//创建子线程
class MyThread extends Thread
{
public void run()
{
//需要先有Looper对象
Looper.prepare();//会创建一个Looper对象,并把该对象放入到该线程的本地变量中,在Looper的构造方法中创建了MessageQueue对象
//在子线程中实例化handler,子线程中没有Looper对象 // mQueue = mLooper.mQueue; handler内部的MessageQueue引用指向的是 Looper中的MessageQueue对象
handler = new Handler();//如果直接实例化Handler,会异常 new RuntimeException,原因是子线程中没有Looper对象 //让Looper对象循环读取MessageQueue中的消息
//循环从队列中读取消息,当读到消息时,回去调用 msg.target.dispatchMessage(msg);
//在Message类中有一个target成员,当发送消息时,target成员被赋值为当前的 handler对象
Looper.loop();
}
} }

mainActivity