热门IT资讯网

多个线程之间的通信

发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Loo
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);                }        }           }


0