Handler:使用方式

文章目录

            • 1、定义
            • 2、作用
            • 3、工作流程
            • 4、具体使用

1、定义
  1. 定义:Android 消息传递机制。
2、作用
  1. 作用:将工作线程更新UI操作信息传递到UI线程,在UI线程更新UI,保证多线程并发更新UI时线程安全。
3、工作流程

Handler:使用方式_第1张图片

4、具体使用
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView mMessageTv;

    // 1、创建 Handler 对象,发送和处理消息(存在内存泄漏问题)
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    mMessageTv.setText("线程:" + msg.obj);
                    break;
                case 2:
                    mMessageTv.setText("线程:" + msg.obj);
                    break;
                default:
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMessageTv = findViewById(R.id.mMessageTv);
        findViewById(R.id.mSendMessageBtn).setOnClickListener(this);
        findViewById(R.id.mPostBtn).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.mSendMessageBtn:
                sendMessage();
                break;
            case R.id.mPostBtn:
                post();
                break;
        }
    }

    private void sendMessage(){
        // 2、创建子线程
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                // 3、创建 Message
                Message msg = Message.obtain();
                msg.what = 1; // 消息存放标识
                msg.obj = "A"; // 消息存放对象

                // 4、发送 Message 给 Handler 处理
                mHandler.sendMessage(msg);

            }
        }.start();
    }

    private void post(){
        // 2、创建子线程
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                // 3、mHandler 的 post 方法发送处理消息
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        mMessageTv.setText("线程:B");
                    }
                });
            }
        }.start();
    }
}

你可能感兴趣的:(Android,多线程)