day1-Android使用Handler进行线程间通信

1、子线程与子线程

public class ThreadCommunicationActivity extends Activity {

    private Button btnGo;
    private Handler handler;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_thread_communication);

        btnGo = findViewById(R.id.btn_go);

        //
        startChildThread();

        btnGo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startChildThread2();
            }
        });
    }


    /**
     * 接收方
     */
    private void startChildThread() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Looper.prepare();//创建Looper

                handler = new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        super.handleMessage(msg);
                        Log.i("qqq", "====" + msg.obj);
                    }
                };

                Looper.loop();//轮训Looper
            }
        }).start();
    }


    /**
     * 发送方
     */
    private void startChildThread2() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Message message = new Message();
                message.obj = "子线程通信成功";
                handler.sendMessage(message);
            }
        }).start();
    }
}

2、子线程与主线程

public class ThreadCommunicationActivity extends Activity {

    private Button btnChild;
    private Handler handlerMain;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_thread_communication);

        btnChild = findViewById(R.id.btn_child);

        //
        final MyThread myThread = new MyThread();
        myThread.start();

        btnChild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Message message = new Message();
                message.obj="chileThread";
                handlerMain.sendMessage(message);
            }
        });
    }

    /**
     * 主线程向子线程发送消息
     */
    public class MyThread extends Thread {

        @Override
        public void run() {
            super.run();
            Looper.prepare();

            handlerMain = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    Log.i("qqq", "收到主线程传递而来:" + msg.obj);
                }
            };

            Looper.loop();
        }
    }
}

xml




    

你可能感兴趣的:(day1-Android使用Handler进行线程间通信)