天天看點

Handler 執行個體

先看一個使用Handler的簡單執行個體:先不考慮Handler造成的記憶體洩漏問題

package cn.zzw.messenger.handlerdemo;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;

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 java.lang.ref.WeakReference;

public class MainActivity extends AppCompatActivity {

private MyHandler mHandler;

private TextView mTv;

private Button mBtn;

private class MyHandler extends Handler {

@Override

public void handleMessage(@NonNull Message msg) {

if (msg.what == 10086) {

mTv.setText(String.valueOf(msg.arg1));

}

}

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mHandler = new MyHandler();

mTv = findViewById(R.id.mTv);

mBtn = findViewById(R.id.mBtn);

mBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

new Thread() {

@Override

public void run() {

try {

int i = 0;

while (i < 100) {

i++;

Thread.sleep(300);

Message msg = Message.obtain();

msg.what = 10086;

msg.arg1 = i;

mHandler.sendMessage(msg);

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}.start();

});

}

步驟:

a. 建立 Handler 對象

b.建立Message對象,封裝消息

c.調用 mHandler.sendMessage(msg) 從子線程發送消息

d.在Handler中重寫 handleMessage(@NonNull Message msg) 方法,接收消息并處理消息。

上一篇: android handler
下一篇: handler方法