美文网首页
android 多线程学习6:HandlerThread

android 多线程学习6:HandlerThread

作者: 木木禾木 | 来源:发表于2020-04-30 17:14 被阅读0次

    android 多线程学习1:一些基础
    android 多线程学习2:线程的创建与方法分析
    android 多线程学习3:synchronized与volatile与线程安全对象
    android 多线程学习4:线程池ThreadPoolExecutor
    android 多线程学习5:AsyncTask
    android 多线程学习6:HandlerThread
    android 多线程学习7:Handler消息处理机制

    HandlerThread使用

            //创建UI线程Handler
            final Handler mainHandler = new Handler();
            //创建HandlerThread实例
            HandlerThread handlerThread = new HandlerThread("HandlerThread1");
            //启动线程
            handlerThread.start();
            //创建工作线程Handler,关联HandlerThread的Looper对象,实现与其他线程进行通信
            Handler workHandler = new Handler(handlerThread.getLooper()) {
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    switch (msg.what) {
                        case 888:
                            //子线程异步处理耗时操作(如查找文件)
                            File file = findFile();
    
                            //发送结果给主线程
                            Message resultMessage = new Message();
                            resultMessage.what = 999;
                            resultMessage.obj = file;
                            mainHandler.sendMessage(resultMessage);
                            break;
                        default:
                            break;
                    }
    
                }
            };
            //发送指令给工作线程
            workHandler.sendEmptyMessage(888);
    
    
    
        private static class MyHandler extends Handler {
    
            private final WeakReference<TestActivity> mActivty;
    
            public MyHandler(TestActivity activity) {
                mActivty = new WeakReference<>(activity);
            }
    
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (mActivty.get() != null) {
                    if (msg.what == 999) {
                        //主线程更新UI操作
                        mActivty.get().refreshView(msg.obj);
                    }
                }
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //退出消息循环
            handlerThread.quit();
            //清空消息队列
            workHandler.removeCallbacksAndMessages(null);
        }
    


    HandlerThread分析

    1. HandlerThread 继承于Thread,所以本质上它就是一个线程;
    2. HandlerThread 内部集成了Looper实现,构建了Handler消息机制,可以让我们在自己的线程中分发和处理消息。


      HandlerThread中的Looper实现
    3. 单线程按照sendMessage的先后顺序执行多个任务;


    HandlerThread使用场景

    HandlerThread比较适用于单线程+异步队列的场景,比如IO读写操作,耗时不多而且也不会产生较大的阻塞。对于网络IO操作,HandlerThread并不适合,因为它只有一个线程,还得排队一个一个等着。


    (部分内容参考于网络,如有不妥,请联系删除~)

    相关文章

      网友评论

          本文标题:android 多线程学习6:HandlerThread

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