知识要点,总共三个步骤:
准备Looper对象
在WorkThread当中生成Handler对象
在MainThread当中发送消息
代码
package com.zhoumengkang.handler2; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button button; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new OnClickListener(){ //这里是MainThread @Override public void onClick(View v) { System.out.println("OnClick:" + Thread.currentThread().getName()); Message msg = handler.obtainMessage(); handler.sendMessage(msg);//把消息发送的消息队列当中 } }); WorkerThread wt = new WorkerThread(); wt.start(); } class WorkerThread extends Thread{ @Override public void run(){ //准备Looper对象 Looper.prepare(); //在WorkerThread当中生成一个Handler对象 handler = new Handler(){ @Override public void handleMessage(Message msg){ System.out.println("handlerMessage:" + Thread.currentThread().getName()); System.out.println("收到了消息对象"); } }; //调用Looper的loop方法之后,Looper对象将不断的从消息队列中取出消息对象 //如果消息队列中没有对象,则该线程阻塞 Looper.loop();//取出对象之后交给当前WorkerThread里的handler来处理 } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
输出结果
04-22 10:57:29.920: I/System.out(813): OnClick:main 04-22 10:57:29.930: I/System.out(813): handlerMessage:Thread-57 04-22 10:57:29.930: I/System.out(813): 收到了消息对象