美文网首页
HandlerThread

HandlerThread

作者: 萝卜枣 | 来源:发表于2018-04-20 08:45 被阅读0次

    1.产生背景

    开启Thread子线程进行耗时操作;

    多次创建和销毁线程是很消耗系统资源的;

    2.什么是HandlerThread

    handle+thread+looper  是一个thread内部有looper

    3.HandlerThread的特点

    1)本质上是一个线程类,继承Thread

    2)有自己的内部Looper对象,可以进行looper循环

    3)通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务

    4)优点是不会堵塞,减少了对性能的消耗,缺点是不能同时进行多任务的处理,需要等待进行处理,处理效率低

    5)与线程池注重并发不同,HandlerThread是一个串行队列,HandlerThread背后只有一个线程。

    HandlerThread实例

        public class MainActivity extends AppCompatActivity {

        private TextView mTvServiceInfo;

        private HandlerThread mCheckMsgThread;

        private Handler mCheckMsgHandler;

        private boolean isUpdateInfo;

        private static final int MSG_UPDATE_INFO = 0x110;

        private Handler mHandler = new Handler();

    @Override

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            mTvServiceInfo = (TextView) findViewById(R.id.id_textview);

            //创建后台线程

            initBackThread();

        }

    @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);

        }

     @Override

        protected void onDestroy() {

            super.onDestroy();

            //释放资源

            mCheckMsgThread.quit();

        }

        private void initBackThread() {

            mCheckMsgThread = new HandlerThread("check-message-coming");

     mCheckMsgThread.start();

            mCheckMsgHandler = new Handler(mCheckMsgThread.getLooper()){

                @Override

                public void handleMessage(Message msg) {

                    checkForUpdata();

                    if (isUpdateInfo){

    mCheckMsgHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO,1000);

                    }

                }

            };

        }

        //模拟从服务器解析数据

        private void checkForUpdata(){

            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();

            }

        }

    }

    相关文章

      网友评论

          本文标题:HandlerThread

          本文链接:https://www.haomeiwen.com/subject/ozycqftx.html