Android子线程间通信
looper默认存在于主线程中,在子线程和主线程通信时,子线程通过主线程中的handler发送消息给主线程的messageQueen消息队列,通过主线程中的looper取出,在handleMessage方法里可以使用【handleMessage运行在主线程中】,那么子线程间怎么通信 子线程没有looper
一:在接受消息的子线程中创建handler前调用 Looper.prepare(); 创建后调用Looper.loop();一个接受消息前准备一个接受消息后取出;
class ThreadA implements Runnable{
private Handler mHandler;
//run运行后才不为null在main里判断
public Handler getHandler(){
return mHandler;
}
@Override
public void run() {
Looper.prepare();
mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1:
Toast.makeText(MainActivity.this,"线程B发过来消息了"+msg.obj,Toast.LENGTH_SHORT).show();
break;
}
}
};
Looper.loop();
}
}
二发送消息的子线程获取到接受的handler进行发消息
class Threadb implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
Message mess=Message.obtain();
mess.what=1;
mess.obj= System.currentTimeMillis()+"";
mAhandler.sendMessage(mess);
}
}
}
三mainactivity里
ThreadA mThreadA=new ThreadA();
Threadb mThreadb=new Threadb();
new Thread(mThreadA).start();
if(mThreadA.getHandler()==null){
try {
Thread.sleep(1000);
mAhandler=mThreadA.getHandler();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
new Thread(mThreadb).start();
运行即可