打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[经典]android 消息机制(二)

接上文。

角色综述(回顾):

(1)UI thread通常就是main thread,而Android启动程序时会替它建立一个MessageQueue

(2)需要一个Looper对象,来管理MessageQueue

(3)可以构造Handler对象来push新消息到Message Queue里;或者接收Looper所送来的消息。

(4)线程AHandler对象可以传递给别的线程,让别的线程能送讯息来给线程A

(5)线程AMessage Queue里的消息,只有线程A所属的对象可以处理。

 例二、子线程传递消息给主线程

public class Activity2extends Activityimplements OnClickListener{

      Buttonbutton =null;

      TextViewtext =null;

      MyHandlermHandler =null;

      Threadthread ;

      protected void onCreate(Bundle savedInstanceState) {

             super.onCreate(savedInstanceState);

             setContentView(R.layout.activity1);        

             button = (Button)findViewById(R.id.btn);

             button.setOnClickListener(this);

             text = (TextView)findViewById(R.id.content);

      }

      public void onClick(View v) {

             switch (v.getId()) {

             case R.id.btn:

                    thread =new MyThread();

                    thread.start();

                    break;

             }            

      }     

      private class MyHandlerextends Handler{             

             public MyHandler(Looper looper){

                    super(looper);

             }

             public void handleMessage(Message msg) {

                    text.setText(msg.obj.toString());

             }            

      }

      private class MyThreadextends Thread{

             public void run() {

                    Looper curLooper = Looper.myLooper();

                    Looper mainLooper = Looper.getMainLooper();

                    String msg ;

                    if(curLooper==null){

                           mHandler =new MyHandler(mainLooper);

                           msg ="curLooper is null";

                    }else{

                           mHandler =new MyHandler(curLooper);

                           msg ="This is curLooper";

                    }

                    mHandler.removeMessages(0);

                    Message m =mHandler.obtainMessage(1, 1, 1, msg);

                    mHandler.sendMessage(m);

             }            

      }

}

说明:

Android会自动替主线程建立Message Queue。子线程没有建立Message Queue。所以mHandler属于主线程。mHandler.sendMessage(m);m消息存入主线程的Message QueuemainLooper看到Message Queue里有讯息,主线程执行到mHandlerhandleMessage()来处理消息。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android消息地址
android消息机制 之Handler
深入Android Handler与线程间通信ITC的详解
【转】Handler: 主线程如何通知子线程
Android性能优化之常见的内存泄漏
Android 多线程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服