您好,登錄后才能下訂單哦!
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.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對象獲取消息以后更新界面 * */ public class MainActivity extends Activity { private Looper looperA; private Looper looperB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new SubThreadA().start(); new SubThreadB().start(); } public void doClick(View view){ switch (view.getId()) { case R.id.button1:sendMessage();break; case R.id.button2: looperA.quit(); looperB.quit(); finish();break; } } public void sendMessage(){ Handler h=new SubHandlerA(); Message.obtain(h, 1, "HelloWorld!").sendToTarget(); } /**線程A*/ class SubThreadA extends Thread{ @Override public void run() { Looper.prepare();//Looper對象構建同時MQ也會構建 looperA=Looper.myLooper(); Looper.loop(); } } /**線程B*/ class SubThreadB extends Thread{ @Override public void run() { Looper.prepare(); looperB=Looper.myLooper(); Looper.loop(); } } /**ThreadA的Handler*/ class SubHandlerA extends Handler{ public SubHandlerA(){ super(looperA); } @Override public void handleMessage(Message msg) { //1.獲取線程A的消息 //Object obj=msg.obj; //2.構建線程B的HandlerB的對象 Handler handler=new SubHandlerB(); //3.將消息傳給HandlerB對象所對應的線程 Message.obtain(handler, 2, msg.obj).sendToTarget(); } } /**ThreadB的Handler*/ class SubHandlerB extends Handler{ public SubHandlerB(){ super(looperB); } /** * 此方法用于處理消息:處理線程A發過來的消息 * |-->獲取ThreadA的消息 * |-->將消息發給主線程 * * */ @Override public void handleMessage(Message msg) { //獲取線程A的消息 //Object mess=msg.obj; //構建主線程的handler Handler handler=new MainHandler(); //借助主線程的Handler將消息發送到主線程??? Message.obtain(handler, 3, msg.obj).sendToTarget(); } } /**主線程的Handler*/ class MainHandler extends Handler{ public MainHandler() { super(Looper.getMainLooper()); } @Override public void handleMessage(Message msg) { setTitle((String)msg.obj); } } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。