public class HandlerMessage extends Activity {
private TextView mTextView;
private Button mButtonOne, mButtonTwo;
private int count = 0;
private MyThreadHandle threadHandle;
private Handler mHandleThree;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.handler_get_message);
mTextView = (TextView) findViewById(R.id.handler_txt);
mButtonOne = (Button) findViewById(R.id.handler_one_btn);
mButtonTwo = (Button) findViewById(R.id.handler_two_btn);
threadHandle = new MyThreadHandle();
threadHandle.start();
<span style="white-space:pre"> </span>//按钮点击事件,点击一次发送一次消息
mButtonOne.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Message mage = Message.obtain();
mage.arg1 = count++;
threadHandle.handlerOne.sendMessage(mage);
}
});
mButtonTwo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Message mage = Message.obtain();
mage.arg1 = count++;
threadHandle.handlerTwo.sendMessage(mage);
}
});
<span style="white-space:pre"> </span>//接收与子线程关联发送过来的消息
mHandleThree = new Handler(Looper.getMainLooper(), new Callback() {// 主线程looper
@Override
public boolean handleMessage(Message msg) {
int arg1 = msg.arg1;
mTextView.setText("子线程 消息" + arg1);
return true;
}
});
}
public class MyThreadHandle extends Thread {
public Handler handlerOne, handlerTwo;
@Override
public void run() {
Looper.prepare();
<span style="white-space:pre"> </span><pre name="code" class="html"><span style="white-space:pre"> </span>//getMainLooper(),与主线程关联
handlerOne = new Handler(Looper.getMainLooper(), new Callback() {// 主线程looper@Overridepublic boolean handleMessage(Message msg) {int arg1 = msg.arg1;Log.e("tag", "消息" + arg1);mTextView.setText("主线程 消息" + arg1);return true;}});
<pre name="code" class="html"><span style="white-space:pre"> </span>//<span style="font-family: Arial, Helvetica, sans-serif;">myLooper()</span><span style="font-family: Arial, Helvetica, sans-serif;">,与子线程关联</span>
handlerTwo = new Handler(Looper.myLooper(), new Callback() { // 子线程looper@Overridepublic boolean handleMessage(Message msg) {int arg1 = msg.arg1;// 将子线程中的数据返回到主线程中显示Message mas = new Message();mas.arg1 = arg1;mHandleThree.sendMessage(mas);return true;}});Looper.loop();}}}