美文网首页
Android多线程:如何正确使用HandlerThread?

Android多线程:如何正确使用HandlerThread?

作者: 怪兽来啦啦啦啦啦 | 来源:发表于2020-04-24 00:31 被阅读0次

    前言

     Android沿用了Java的线程模型,除了Thread外,Android还实现了AsyncTask、HandlerThread、IntentService,它们的底层实现也是线程。
     本文讲的是IntentService

    相关文章阅读
    AsyncTask
    IntentService


    1 使用步骤

        //1.创建HandlerThread,可以执行线程名
        val mHandlerThread = HandlerThread("ThreadName:小猪")
        //2.启动线程
        mHandlerThread.start()
        //3.创建工作线程
        val mWorkerHandler = Handler(mHandlerThread.looper){
            //TODO 小猪时间管理速成实现?
            true
        }
        //4.发送消息
        val message = mWorkerHandler.obtainMessage()
        message.obj = intent
        mWorkerHandler.sendMessage(message)
        //5.结束线程
        mHandlerThread.quit()
        //或者使用此方法结束线程
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            mHandlerThread.quitSafely()
        }
    

     最后需要注意Handler因为不是静态类可能造成的内存泄漏问题。


    2 原理

    既然底层实现是Thread,那么核心方法一定是在run方法中,我们可直接查看run方法

        @Override
        public void run() {
            mTid = Process.myTid();
            //1创建消息队列
            Looper.prepare();
            synchronized (this) {
                //2 通过ThreadLocal获取Looper
                mLooper = Looper.myLooper();
                //HandlerThread内部的getLooper方法有wait操作,需要唤醒。
                notifyAll();
            }
            Process.setThreadPriority(mPriority);
            onLooperPrepared();
            //3 开启循环
            Looper.loop();
            mTid = -1;
        }
    

    总结

     HandlerThread在内部创建了消息队列,通过Handler的来通知HandlerThread执行具体任务。

    相关文章

      网友评论

          本文标题:Android多线程:如何正确使用HandlerThread?

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