package com.example.yanglliu.activitysavedemo.ui.fragment; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.support.annotation.Nullable; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.yanglliu.activitysavedemo.R; /** * Created by yangl.liu on 2016/7/5. */ public class HandlerThreadFragment extends BaseFragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_hander_thread, container, false); //创建后台线程 initBackThread(); mTvServiceInfo = (TextView) view.findViewById(R.id.id_textview); return view; } private TextView mTvServiceInfo; private HandlerThread mCheckMsgThread; private Handler mCheckMsgHandler; private boolean isUpdateInfo; private static final int MSG_UPDATE_INFO = 0x110; //与UI线程管理的handler private Handler mHandler = new Handler(); private void initBackThread() { mCheckMsgThread = new HandlerThread("check-message-coming"); mCheckMsgThread.start(); mCheckMsgHandler = new Handler(mCheckMsgThread.getLooper()) { @Override public void handleMessage(Message msg) { checkForUpdate(); if (isUpdateInfo) { //sendEmptyMessage调用的是sendEmptyMessageDelayed(MSG_UPDATE_INFO,0); mCheckMsgHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO, 1000); } } }; } /** * 模拟从服务器解析数据 */ private void checkForUpdate() { try { //模拟耗时 Thread.sleep(1000); mHandler.post(new Runnable() { @Override public void run() { 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 public void onResume() { super.onResume(); //开始查询 isUpdateInfo = true; mCheckMsgHandler.sendEmptyMessage(MSG_UPDATE_INFO); } @Override public void onPause() { super.onPause(); //停止查询 isUpdateInfo = false; mCheckMsgHandler.removeMessages(MSG_UPDATE_INFO); } @Override public void onDestroy() { super.onDestroy(); //释放资源 mCheckMsgThread.quit(); } }
HanlerThread应用场景(耗时任务时总会new一个Thread的线程去跑,当任务执行完后,线程就会自动被销毁掉,如果又由新的任务,我们又得新建线程...)