Android(安卓)Message机制
16lz
2022-05-31
参考链接http://www.cnblogs.com/hnrainll/archive/2012/01/06/2314863.html
package com.test.messagedemo;import android.R.string;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import android.support.v4.app.NavUtils;public class MainActivity extends Activity {private Button btn1,btn2,btn3,btn4;private TextView tv1,tv2,tv3,tv4;private static final String TAG = "Thread Id:"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1=(Button)findViewById(R.id.btn1); btn1.setOnClickListener(listener); tv1=(TextView)findViewById(R.id.tv1); btn2=(Button)findViewById(R.id.btn2); btn2.setOnClickListener(listener); tv2=(TextView)findViewById(R.id.tv2); btn3=(Button)findViewById(R.id.btn3); btn3.setOnClickListener(listener); tv3=(TextView)findViewById(R.id.tv3); btn4=(Button)findViewById(R.id.btn4); btn4.setOnClickListener(listener); tv4=(TextView)findViewById(R.id.tv4); } View.OnClickListener listener=new View.OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubswitch (v.getId()){case R.id.btn1://主线程给自己发送消息Looper looper;looper=Looper.myLooper();//获取当前线程的Looper,现在为主线程EventHandler mHander=new EventHandler(looper);mHander.removeMessages(0);//删除队列消息String obj="This is main thread's message and received by itself!";Message m=mHander.obtainMessage(1, 1, 1, obj);mHander.sendMessage(m);//mHander.handleMessage(m);//sendMessage后,Handler会自动调用handleMessagebreak;case R.id.btn2://子线程给主线程发送消息NoLooperThread noLooperThread=new NoLooperThread();noLooperThread.start();break;case R.id.btn3://子线程给自己发送消息OwnLooperThread ownLooperThread=new OwnLooperThread();ownLooperThread.start();break;case R.id.btn4://主线程给子线程发送消息ReceiveMessageThread receiveMessageThread=new ReceiveMessageThread();receiveMessageThread.start();break;default:break;}}};private class EventHandler extends Handler{ public EventHandler(Looper looper)//这个方法必须写下来,否则这个类用不了 { super (looper); }@Overridepublic void handleMessage(Message msg){// TODO Auto-generated method stubswitch (msg.what){case 1:tv1.setText(msg.obj.toString());break;case 2:tv2.setText(msg.obj.toString());case 3:tv3.setText(msg.obj.toString());break;case 4:tv4.setText(msg.obj.toString());break;default:break;}}}private class NoLooperThread extends Thread{private EventHandler mNoLooperThreadHandler; @Overridepublic void run(){Looper looper=Looper.getMainLooper();mNoLooperThreadHandler=new EventHandler(looper);mNoLooperThreadHandler.removeMessages(0);String obj="This is the message from otherThread to MainThread!";Message m=mNoLooperThreadHandler.obtainMessage(2, 1, 1, obj);mNoLooperThreadHandler.sendMessage(m);//mNoLooperThreadHandler.handleMessage(m);Log.i(TAG, "NoLooperThread id:" + this.getId()); //注意将long型转成String的一个技巧}} private class OwnLooperThread extends Thread { private EventHandler mOwnLooperEventHandler;@Overridepublic void run(){// TODO Auto-generated method stubLooper.prepare();Looper looper=Looper.myLooper();mOwnLooperEventHandler=new EventHandler(looper);mOwnLooperEventHandler.removeMessages(0);String obj="This is message from otherThread and to itself!";Message m=mOwnLooperEventHandler.obtainMessage(3, 1, 1, obj);mOwnLooperEventHandler.sendMessage(m);//mOwnLooperEventHandler.handleMessage(m);Log.i(TAG, "ownLooperThread id:" + this.getId()); } } private class ReceiveMessageThread extends Thread { private EventHandler mReceiveMessageHandler;@Overridepublic void run(){// TODO Auto-generated method stubLooper.prepare();Looper looper=Looper.getMainLooper();mReceiveMessageHandler=new EventHandler(looper);mReceiveMessageHandler.removeMessages(0);String obj="This is message from MainThread to OtherThread!";Message m=mReceiveMessageHandler.obtainMessage(4, 1, 1, obj);mReceiveMessageHandler.sendMessage(m);Log.i(TAG, "ReceiveLooperThread id:" + this.getId()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
更多相关文章
- Android(安卓)线程池管理
- android字体闪烁动画(线程)
- Android(安卓)Socket网络通信
- Android(安卓)AsyncTask
- Android实现计时以及倒计时的几种方法
- 多线程实现android更新进度条
- Android利用Looper在子线程中改变UI
- 第一章:初入Android大门(程序加载应用)
- Android中ListView异步加载数据