使用"毒丸喂养HandlerThread是否安全?#34 ;?

时间:2016-01-23 21:13:17

标签: android multithreading

我试图找出一个解决方法,因为HandlerThread的quitSafely()可以从API 18获得(我的目标是14)。我最后还借了毒药#34;来自actor系统的概念 - 导致线程在处理时退出的消息。我的实现如下:

import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;

public class WorkerThread extends HandlerThread {
    private Handler mWorkerHandler;

    public WorkerThread(String name) {
        super(name);
    }

    public void prepareHandler(){
        mWorkerHandler = new Handler(getLooper());
    }

    public void postTask(Runnable task){
        mWorkerHandler.post(task);
    }

    public boolean quitSafely() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            return super.quitSafely();
        } else {
            Looper looper = getLooper();
            if (looper != null) {
                mWorkerHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        quit();
                    }
                });
                return true;
            }
            return false;
        }
    }
}

这样做是否安全(就消息处理的正确性而言,从内部退出时线程不会爆炸)?

0 个答案:

没有答案