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

前言

 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?)