我总是创建两个处理程序:一个在主线程上包装,另一个在单个线程上包装。
这是在 Activity 生命周期中启动和停止它们的最佳方法吗?
HandlerThread safeThread = null;
Handler safeHandler = null;
Handler handler = null;
@Override
public void onStart() {
if (safeThread == null) {
safeThread = new HandlerThread("safeThread");
safeThread.start();
safeHandler = new Handler(safeThread.getLooper());
} else if (safeThread.getState() == Thread.State.NEW) {
safeThread.start();
safeHandler = new Handler(safeThread.getLooper());
} else if (safeThread.getState() == Thread.State.WAITING) {
safeHandler = new Handler(safeThread.getLooper());
} else if (safeThread.getState() == Thread.State.TERMINATED) {
safeThread = null;
safeThread = new HandlerThread("safeThread");
safeThread.start();
safeHandler = new Handler(safeThread.getLooper());
}
}
protected void onStop() {
Log.d("x", "onStop is executed");
safeHandler = null;
safeThread.quit();
safeThread.interrupt();
safeThread = null;
super.onStop();
}
最佳答案
我知道这是一个有点老的问题,但我偶然发现了它寻找相同的答案并进一步研究我不相信当前的答案适用于 HandlerThread(尽管对于普通线程绝对正确)
HandlerThread 有一个内置的 quit()
和 quitSafely
(API18) 方法来停止线程。
https://developer.android.com/reference/android/os/HandlerThread.html#quit()
两者的区别仅在于队列中的消息是否会在停止前被处理。
所以要回答,就这么简单:
safeThread.quit();
关于android - 这是停止处理程序线程的完美方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907626/