参考链接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;    }    }

更多相关文章

  1. Android(安卓)线程池管理
  2. android字体闪烁动画(线程)
  3. Android(安卓)Socket网络通信
  4. Android(安卓)AsyncTask
  5. Android实现计时以及倒计时的几种方法
  6. 多线程实现android更新进度条
  7. Android利用Looper在子线程中改变UI
  8. 第一章:初入Android大门(程序加载应用)
  9. Android中ListView异步加载数据

随机推荐

  1. Android高手进阶教程(九)之----Android(
  2. android为ImageView使用蒙层
  3. 对SqliteDatabase.findEditTable的改进
  4. Android修改源代码控制永不锁屏
  5. Tween动画
  6. Android颜色小工具
  7. [Android] Otto源码简析
  8. Android(安卓)-- RecyclerView
  9. adb 指令
  10. PagerBottomTabStrip