UI线程与子线程通信示例 日记

UI线程与子线程通信示例 日记

个人日记

package com.example.appthread_test;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private Handler SON_handler;
    TextView tx1, tx2;
    Button button;
    int i = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        tx1 = (TextView) findViewById(R.id.textView);
        tx2 = (TextView) findViewById(R.id.textView2);
        button.setOnClickListener(new btn_click());
        SON_Thread();//启动子线程
    }

    class btn_click implements View.OnClickListener {   //定义一个类实现监听的接口
        public void onClick(View v) {
            Message SON_msg = SON_handler.obtainMessage();//绑定子线程消息句柄
             SON_msg.what = 0;
            SON_msg.obj = "UI线程发出的消息" + i++;
            SON_handler.sendMessage(SON_msg);
        }
    }


    private Handler MAIN_Handler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(@NonNull Message msg) {
            if (msg.what == 0) {
                //收到子线程消息后,实现自己的任务
                tx1.setText((String) msg.obj);
            }
        }
    };//接受处理自定义消息(处理UI线程任务)


    public void SON_Thread() {
        new Thread(new Runnable() {
            @SuppressLint("HandlerLeak")
            @Override
            public void run() {
                Looper.prepare();//将SON_handler绑定到当前的子线程
                SON_handler = new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        tx2.setText((String) msg.obj);
                        if (msg.what == 0) {
                            //收到UI线程消息后,实现自己的任务
                            Message Main_msg = MAIN_Handler.obtainMessage();//绑定主线程消息句柄
                            Main_msg.what = 0;
                            Main_msg.obj = "子线程回复消息" + i++;
                            MAIN_Handler.sendMessage(Main_msg);
                        }
                    }
                };
                //死循环!只能靠消息驱动!
                //退出使用SON_Thread.getLooper().quit();
                Looper.loop();//需要让looper动起来去消息队列中抽取消息
            }
        }).start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值