android中主线程和子线程之间的通信是通过handler消息循环机制,主线程中的handler把子线程中的message发送给主线程中的looper,或者主线程中的handler通过post向looper发送一个runnable。looper默认存在于主线程中,子线程中是没有的。那怎么办呢?我们可以把looper绑定到子线程中,调用Looper.prepare()方法为该子线程生成looper,生成后调用Looper.loop()启动消息队列,并且在该子线程中创建一个handler。在另一个子线程中调用该handler发送消息。这样就可以实现子线程间的通信了。

示例代码:

private Handler handler;//子线程一class ThreadA implements Runnable{        private Handler mHandler;        //run运行后才不为null在main里判断        public Handler getHandler(){            return mHandler;        }        @SuppressLint("HandlerLeak")        @Override        public void run() {            Looper.prepare();            mHandler=new Handler(){                @Override                public void handleMessage(Message msg) {                    super.handleMessage(msg);                    switch (msg.what){                        case 1:                            Log.e("线程A","线程B发过来消息了--"+msg.obj);                            break;                    }                }            };            Looper.loop();        }    }//子线程二    class ThreadB implements Runnable{        @Override        public void run() {                Message mess=Message.obtain();                mess.what=1;                mess.obj= "线程B"+System.currentTimeMillis();                handler.sendMessage(mess);        }    }

 在activity onCreate方法里

        ThreadA threadA = new ThreadA();        ThreadB threadb = new ThreadB();        new Thread(threadA).start();        if(threadA.getHandler() == null) {            try {                Thread.sleep(1000);                handler = threadA.getHandler();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        new Thread(threadb).start();

运行即可。

更多相关文章

  1. 如果我是Android面试官九
  2. Android中的UI线程详解
  3. android连续调用setVisibility(View.VISIBLE)和setVisibility(Vi
  4. android用jdbc多线程操作sqlite小结
  5. Android多线程(三)HandlerThread源码原理解析
  6. [置顶] android ANR
  7. Android(安卓)Looper
  8. Android界面刷新的方法
  9. 使用线程更新UI

随机推荐

  1. 关于JQuery jqGrid colModel 遇到的一个
  2. 在线请教调用Jquery错误:TypeError: a is
  3. zTree -- jQuery 树插件 使用小结
  4. js/jquery操作div显示或隐藏
  5. Java程序员的JavaScript学习笔记(12——jQ
  6. 尝试隐藏表中的行时jQuery性能
  7. ASP.Net MVC与HTML + KnockoutJS + WebAP
  8. JSP中如何使用JQuery?
  9. Dreamweaver Cs4 jQuery自动提示插件绿色
  10. JQuery Ajax到PHP在查询期间更新div