Android Handler(二)子线程和子线程通信
子线程和子线程间通过Handler通信
发送消息的子线程
package com.cdc.handler; import android.os.Handler; import android.os.Message; import android.os.SystemClock; //发送消息的子线程 public class Thread1 extends Thread { private Handler handler; public Thread1(Handler handler){ super.setName("Thread1"); this.handler=handler; } @Override public void run() { Message msg = Message.obtain(); msg.what = 1; msg.obj = System.currentTimeMillis()+""; handler.sendMessage(msg); System.out.println((Thread.currentThread().getName() + "----发送了消息!" + msg.obj)); SystemClock.sleep(1000); } }
接收消息的子线程
package com.cdc.handler; import android.os.Handler; import android.os.Looper; //接收消息的子线程 public class Thread2 extends Thread{ private Handler handler2; public Handler getHandler(){//注意哦,在run执行之前,返回的是null return handler2; } public Thread2(){ super.setName("Thread2"); } @Override public void run() { //在子线程里面新建Handler的实例,需要先调用Looper.prepare();否则会报错:Can't create handler inside thread that has not called Looper.prepare() Looper.prepare(); handler2 = new Handler(){ public void handleMessage(android.os.Message msg) { //这里处理消息 System.out.println(("收到消息了:" + Thread.currentThread().getName() + "----" + msg.obj)); }; }; Looper.loop(); } }
调用
private Handler myHandler=null; private Thread2 thread1; private Thread1 thread2; @OnClick(R.id.handler3) public void handler3(){ thread1=new Thread2(); thread1.start(); myHandler=thread1.getHandler(); while(myHandler==null){ SystemClock.sleep(100); myHandler=thread1.getHandler(); } thread2=new Thread1(myHandler); thread2.start(); }