Andorid中HandlerThread使用小记
遇到HandlerThread的问题,顺手复习一下HandlerThread用法:
package cn.areful.apistudy.handlerthread;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import cn.areful.apistudy.R;
public class HandlerThreadActivity2 extends AppCompatActivity {
private static final int MSG_UPDATE_INFO_THREAD = 0x0; //通知子线程执行耗时操作
private static final int MSG_UPDATE_INFO_UI = 0x1000; //通知UI线程绘制
private TextView mInfoText;
private Handler mThreadHandler;
private Handler mHandler;
private boolean mIsUpdateInfo;
public static void startActivity(Context context) {
Intent intent = new Intent(context, HandlerThreadActivity2.class);
if (!(context instanceof Activity)) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handlerthread_sample);
mInfoText = findViewById(R.id.infoText);
//noinspection Convert2Lambda
mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
//主线程刷新UI显示
mInfoText.setText(String.valueOf(System.currentTimeMillis()));
return false;
}
});
//初始化HandlerThread
HandlerThread handlerThread = new HandlerThread("BackgroundThread");
handlerThread.start();
mThreadHandler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_UPDATE_INFO_THREAD) {
//子线程执行耗时操作
updateInfoInThread();
if (mIsUpdateInfo) {
//循环执行
mThreadHandler.sendEmptyMessage(MSG_UPDATE_INFO_THREAD);
}
}
}
};
}
@Override
protected void onResume() {
super.onResume();
mIsUpdateInfo = true;
mThreadHandler.sendEmptyMessage(MSG_UPDATE_INFO_THREAD);
}
@Override
protected void onPause() {
super.onPause();
mIsUpdateInfo = false;
mThreadHandler.removeMessages(MSG_UPDATE_INFO_THREAD);
}
@Override
protected void onDestroy() {
super.onDestroy();
//移除主线程Handler的Messages,退出子线程
mHandler.removeCallbacksAndMessages(null);
mThreadHandler.getLooper().quit();
}
private void updateInfoInThread() {
try {
//模拟执行耗时操作
Thread.sleep(1000);
mHandler.sendEmptyMessage(MSG_UPDATE_INFO_UI);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
布局文件R.layout.activity_handlerthread_sample:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/infoText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
浙公网安备 33010602011771号