我试图找出一个解决方法,因为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;
}
}
}
这样做是否安全(就消息处理的正确性而言,从内部退出时线程不会爆炸)?