开启Thread子线程 进行耗时操作
多次创建和销毁线程 是很消耗系统资源的
一.handerThread 是什么
handler+thread+looper 是一个thread内部有 looper
- HandlerThread 本质上是一个线程类,它继承Thread;
- HanderThread有自己的内部Looper对象,可以进行looper循环
- 通过HanderThread的looper对象 传递给Hander对象 ,可以在handerMessage中进行异步任务(子线程中)
- 优点是不会有堵塞,减少对性能的消耗,缺点是不能同时进行多任务处理,需要等待进行处理,处理效率较低
- 与线程池注重并发不同,HanderThread 是一个串行队列,HanderThread 背后只有一个线程
public class HandlerThreadActivity extends AppCompatActivity {
private TextView mTvServiceInfo;
private HandlerThread mCheckMsgThread;
private Handler mCheckMsgHandler;
private boolean isUpdateInfo;
//与UI线程管理的handler
private Handler mHandler = new Handler();
private static final int MSG_UPDATE_INFO = 0x110;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handler_thread);
//创建后台线程
initBackThread();
mTvServiceInfo = (TextView) findViewById(R.id.id_textview);
}
@Override
protected void onResume() {
super.onResume();
//开始查询
isUpdateInfo = true;
mCheckMsgHandler.sendEmptyMessage(MSG_UPDATE_INFO);//第一次启动
}
@Override
protected void onPause() {
super.onPause();
//停止查询
isUpdateInfo = false;
mCheckMsgHandler.removeMessages(MSG_UPDATE_INFO);
}
private void initBackThread() {
mCheckMsgThread = new HandlerThread("check-message");
mCheckMsgThread.start();
//子线程的looper 可执行异步任务
mCheckMsgHandler = new Handler(mCheckMsgThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
checkForUpdate(); //子线程中执行
if (isUpdateInfo) {
mCheckMsgHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO, 1000);
}
}
};
}
/**
* 模拟从服务器解析数据
*/
private void checkForUpdate() {
try
{
//模拟耗时
Thread.sleep(1000);
//ui 线程的hander
mHandler.post(new Runnable() {
@Override
public void run() {
//Ui线程中执行
String result = "实时更新中,当前大盘指数:<font color='red'>%d</font>";
result = String.format(result, (int) (Math.random() * 3000 + 1000));
mTvServiceInfo.setText(Html.fromHtml(result));
}
});
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//释放资源
mCheckMsgThread.quit();
}
}
网友评论