2020-01-08 对Handler的初了解与简单案例

                                                  Handler消息传递机制

Handler消息传递机制 的使用教程


在android中使用多线程有一点需要注意的是:不能在子线程中动态改变主线程的UI组件的属性。【Handler是android提供的一个用来更新UI组件的机制,也是一个消息处理机制】


Handler类中常用的方法:

handMessage(Message msg) 处理消息的方法,通过重写该方法来处理消息,在发送消息时该方法会自动回调。

sendEmptyMessage(int what)发送空消息

sendMessageDelayed(Message msg,long uptimeMillis)指定多少毫秒之后发送消息

obtainMessage() 获取消息


下面提供一个简单的子线程在handler消息机制下更新主线程UI组件内容的例子,代码量非常少,主要用于体验handler的消息机制;



2020-01-08 对Handler的初了解与简单案例_第1张图片
当点击按钮后可以更新textview的内容,其是在handler消息机制下完成的


2020-01-08 对Handler的初了解与简单案例_第2张图片

布局文件:

2020-01-08 对Handler的初了解与简单案例_第3张图片
简单的一个textview和一个button组件

主线程代码:

package com.example.handler;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivityextends AppCompatActivityimplements View.OnClickListener {

private TextViewmTextview;

private ButtonmButton;

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

Handlerhandler=new Handler(){

@Override

    public void handleMessage(@NonNull Message msg) {

super.handleMessage(msg);

if (msg.what==0x11){

mTextview.setText("这就是生活的目的");

}

}

};

private void initView() {

mTextview = (TextView) findViewById(R.id.textview);

mButton = (Button) findViewById(R.id.button);

mButton.setOnClickListener(this);

}

@Override

    public void onClick(View v) {

switch (v.getId()) {

case R.id.button:

jump();

break;

}

}

private void jump() {

Thread thread=new Thread(new Runnable() {

@Override

            public void run() {

//handler发送消息告诉thread知道更新组件的任务交给我handler就可以了

        handler.sendEmptyMessage(0x11);

}

});

//开启线程

        thread.start();

}

}


你可能感兴趣的:(2020-01-08 对Handler的初了解与简单案例)