android两个子线程间通信

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();

运行即可。

你可能感兴趣的:(Android)