Android 主线程与子线程之间消息传递

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//点击mButton子线程发消息给主线程,mButton2主线程发消息给子线程
    private static final String TAG = "MainActivity";
    private Button mButton;
    private Button mButton2;

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    mButton.setText(msg.obj.toString()); //根据子线程发过来的消息更改按钮上的文字
                    break;

                default:

break;

            }
        }
    };


    private Handler mHandler2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

        mButton = (Button) findViewById(R.id.button);
        mButton2 = (Button) findViewById(R.id.button2);
        
        mButton.setOnClickListener(this);
        mButton2.setOnClickListener(this);


        //开启子线程接收主线程发送的消息
        new MyThread().start();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                Message message = new Message();
                message.what = 1;
                message.obj = "改变后的文字";
                mHandler.sendMessage(message);
                break;
            case R.id.button2:
                Log.d("Test", "MainThread is ready to send msg:" );
                mHandler2.obtainMessage(0,"这是主线程handler发送给子线程的").sendToTarget();
                break;
        }
    }

    class MyThread extends Thread{
        @Override
        public void run() {
            //建立消息循环的步骤
            Looper.prepare();//1、初始化Looper
            mHandler2 = new Handler(){      //2、绑定handler到CustomThread实例的Looper对象
                @Override
                public void handleMessage(Message msg) {    //3、定义处理消息的方法
                    switch(msg.what) {
                        case 0:
                            Log.d("Test", "MyThread receive msg:" +  msg.obj.toString()); //看log,看收到主线程的消息没有
                    }
                }
            };
            Looper.loop();  //4、启动消息循环
        }
    }
   
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值