多个线程之间的通信
importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Looper;importandroid.os.Message;importandroid.view.View;/***1、子线程A发消息给子线程B*2、子线程B发消息给主线程*3、主线程更新界面*具体实现思路*1、构建两个工作线程,SubThreadA和SubThreadB*2、工作线程启动时,在两个工作线程中构建两个Looper对象*3、构建两个工作线程Handler对象SubHandlerA和SubHandlerB*4、在SubHandlerA中获取消息并将消息传给SubHandlerB对象*5、在SubHandlerB中获取SubHandlerA的消息,并将消息传给主线程*6、主线程的MainHandler对象获取消息以后更新界面**/publicclassMainActivityextendsActivity{privateLooperlooperA;privateLooperlooperB;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);newSubThreadA().start();newSubThreadB().start();}publicvoiddoClick(Viewview){switch(view.getId()){caseR.id.button1:sendMessage();break;caseR.id.button2:looperA.quit();looperB.quit();finish();break;}}publicvoidsendMessage(){Handlerh=newSubHandlerA();Message.obtain(h,1,"HelloWorld!").sendToTarget();}/**线程A*/classSubThreadAextendsThread{@Overridepublicvoidrun(){Looper.prepare();//Looper对象构建同时MQ也会构建looperA=Looper.myLooper();Looper.loop();}}/**线程B*/classSubThreadBextendsThread{@Overridepublicvoidrun(){Looper.prepare();looperB=Looper.myLooper();Looper.loop();}}/**ThreadA的Handler*/classSubHandlerAextendsHandler{publicSubHandlerA(){super(looperA);}@OverridepublicvoidhandleMessage(Messagemsg){//1.获取线程A的消息//Objectobj=msg.obj;//2.构建线程B的HandlerB的对象Handlerhandler=newSubHandlerB();//3.将消息传给HandlerB对象所对应的线程Message.obtain(handler,2,msg.obj).sendToTarget();}}/**ThreadB的Handler*/classSubHandlerBextendsHandler{publicSubHandlerB(){super(looperB);}/***此方法用于处理消息:处理线程A发过来的消息*|-->获取ThreadA的消息*|-->将消息发给主线程***/@OverridepublicvoidhandleMessage(Messagemsg){//获取线程A的消息//Objectmess=msg.obj;//构建主线程的handlerHandlerhandler=newMainHandler();//借助主线程的Handler将消息发送到主线程???Message.obtain(handler,3,msg.obj).sendToTarget();}}/**主线程的Handler*/classMainHandlerextendsHandler{publicMainHandler(){super(Looper.getMainLooper());}@OverridepublicvoidhandleMessage(Messagemsg){setTitle((String)msg.obj);}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。