主线程向子线程发送消息
?
public class TestHandler extends Activity {
?
Button m_startbtn ;
Button m_endbtn;
MyThreadHandler m_threadHandler;
?
/** Called when the activity is first created. */
?? ?@Override
?? ?public void onCreate(Bundle savedInstanceState) {
?? ? ? ?super.onCreate(savedInstanceState);
?? ? ? ?setContentView(R.layout.main);
?? ? ? ?System.out.println(Thread.currentThread().getId());
?
?? ? ? ?m_startbtn = (Button)findViewById(R.id.start);
?? ? ? ?m_startbtn.setOnClickListener(new StartOnClickListener());
?? ?new MyThread().start();
?? ?}
?
?
?? ?class StartOnClickListener implements OnClickListener
?? ?{
?
@Override
public void onClick(View v) {
//在主线程中获取子线程的message对象然后再发送
Message msg = m_threadHandler.obtainMessage(1,1,1,"主线程发消息了");
m_threadHandler.sendMessage(msg);
}
?
?? ?}
?
?
?? ?class MyThread extends Thread
?? ?{
?? ?@Override
?? ?public void run()
?? ?{
?? ?
//创建该线程的Looper对象,用于接收消息?
?? ?Looper.prepare();
//线程的looper创建的handler表示消息接收者是子线程
?? ?m_threadHandler = new MyThreadHandler(Looper.myLooper());
//循环从MessageQueue中取消息。?
?? ?Looper.loop();
?? ?}
?? ?}
?
?? ?class MyThreadHandler extends Handler
?? ?{
?? ?public MyThreadHandler(Looper loop)
?? ?{
?? ?super(loop);
?? ?}
?? ?
?? ?@Override
?? ?public void handleMessage(Message msg)
?? ?{
?? ?super.handleMessage(msg);
//消息处理
?? ?System.out.println("我是子线程的Handler,收到了消息:"+(String)msg.obj);
?? ?}
?? ?
?? ?}
?
?
}