关闭应用程序后守护线程仍然存在

Daemon Thread is still alive after closing the app

我只是用一个几乎是空的 android 项目.

进行测试

我在 Main Activity 中创建了一个守护线程。

启动应用程序,然后按 phone 上的后退按钮关闭应用程序。

但是守护线程永远不会死。

守护线程在空 JAVA PROJECT.

中工作得很好

但是 android 不起作用。

我搜索了几个小时的解决方案,但只找到了这个。

A daemon thread only runs as long as there are non-daemon threads running. When the last non-daemon thread ends, the runtime will exit. This is not normally relevant to applications with a UI.

有人知道怎么解决吗?

PS。 我不是通过按下硬件后退按钮而是通过按下 'App info' 中的 'Force stop' 按钮停止了应用程序,应用程序和线程都消失了!

我最初是从 android 开发的一些示例代码中了解守护线程的。

但是没有人提到我的经历。

android 开发人员是否只是相信守护线程肯定会被杀死?

But the daemon thread never dies.

据推测,您没有 cancel() 线程。您需要在适当的时候执行此操作。

But with android, doesn't work.

它工作得很好。它的工作原理与 Java 中的相同,您可以通过阅读引用的段落来判断。不同之处在于 how long your process lives 和该进程中的线程(Android 进程除了您派生的线程之外还有其他线程)。

Does anyone know how to solve this?

在适当的时候在您的线程上调用 cancel()

按下后退按钮不会关闭应用程序(假设关闭意味着进程终止)。这只完成了一个 activity,但过程仍然是 运行。 要实现所需的行为,您可以使用例如。 AsyncTask and call cancel() from appropriate callback of your Activity eg. in onDestroy() or onBackPressed() 如果您对按下后退按钮感兴趣。

很抱歉指出可能的基本问题,但请注意您的问题,您是否确保在关闭后 运行 在您的任务管理器中 (ctrl+alt+delete)..有任务管理器 运行与您的守护进程一起运行然后在关闭守护进程期间观察在任务管理器中关闭期间和之后发生的情况,因为它可能正在根据守护进程中的设置检查设置备份文件....或者您是否使用了 ExecutorService 来 运行 作为 Java 中的守护进程,在这种情况下,这将阻止您的程序关闭,请参见此处 ExecutorService - 10 tips and tricks

Java Applicatioin Process Hangs on Windows and Cached Thread Pool