android - 这是停止处理程序线程的完美方法吗?

标签 android multithreading

我总是创建两个处理程序:一个在主线程上包装,另一个在单个线程上包装。

这是在 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/

相关文章:

android - 使 ListView 的单元格在android中的 ListView 中可点击

c++ - Boost、异常、线程和异步,我该如何处理?

java - 由于异步 Firebase 调用,主线程做了太多工作?

java并发实践14.6

java - 如何在 Android 中单击一个按钮运行长代码而不导致应用程序崩溃?

java - 如何记录更改?

java - Android控制ADmob点击后隐藏addview窗口

java - Horizo​​ntalScrollView 中的捕捉效果

java - Android中Activity创建后如何执行代码?

java - 多线程Java