【问题标题】:Daemon Thread is still alive after closing the app关闭应用程序后守护线程仍然存在
【发布时间】:2015-08-09 13:17:32
【问题描述】:

我只是在用一个几乎空的 android 项目进行测试。

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

启动应用,按手机上的返回键关闭应用。

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

Daemon Thread 非常适合空的 JAVA PROJECT

但是在安卓上,就不行了。

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

只要有非守护线程,守护线程才会运行 跑步。当最后一个非守护线程结束时,运行时将退出。 这通常与具有 UI 的应用程序无关。

有人知道怎么解决吗?

PS。 我不是通过按硬件后退按钮而是通过按“应用信息”中的“强制停止”按钮来停止应用程序,并且应用程序和线程都消失了!

我首先从一些android开发的示例代码中了解了Daemon Thread。

但没有人提及我的经历。

Android 开发者是否相信 Daemon Threads 肯定会被杀死?

【问题讨论】:

    标签: java android multithreading daemon


    【解决方案1】:

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

    大概,你没有cancel() 线程。您需要在适当的时候执行此操作。

    但是在安卓上,就不行了。

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

    有人知道怎么解决吗?

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

    【讨论】:

    • 感谢您的友好回复 CommonsWare!但我不明白你。首先我不知道'cancel()' 是什么。我只知道stop() 和interrupt() 方法。其次,我正在测试一个空项目,所以我认为按下后退按钮可以停止所有线程,我不需要为线程编写任何代码。第三,我打算使用守护线程,因为我认为我不需要代码来停止特定的线程。如果我必须取消线程,那么对我使用 Daemon 没有任何好处。
    • @Jenix:我对方法名称表示歉意;我在想AsyncTask,它使用cancel()。 “我确实认为按下后退按钮可以停止所有线程,我不需要为线程编码”——不。导航(BACK、HOME 等)对线程没有直接影响。它们可能会影响您的进程的生存时间,但如果您希望在销毁活动时让后台线程停止,您需要自己处理。 “如果我必须取消线程,那么为我使用 Daemon 没有任何好处”——同意。
    • @Jenix:“通过按下‘应用信息’中的‘强制停止’按钮,应用和线程都消失了!” -- 那是因为“强制停止”会终止您的进程。 “Android 开发者是否相信 Daemon Threads 肯定会被杀死?” -- Android 开发者不使用守护线程。我们需要比这更好地控制我们的线程生命周期。
    • 谢谢一百万!! CommonsWare 帮了大忙!
    【解决方案2】:

    按返回按钮不会关闭应用程序(假设关闭意味着进程终止)。那只完成一个活动,但进程仍在运行。 要实现所需的行为,您可以使用例如。 AsyncTask 并从您的活动的适当回调中调用 cancel(),例如。在onDestroy()onBackPressed(),如果您对按下后退按钮完全感兴趣。

    【讨论】:

      【解决方案3】:

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

      Java Applicatioin Process Hangs on Windows and Cached Thread Pool

      【讨论】:

      • Android 设备不使用“ctrl+alt+delete”。
      • 我知道,但是,我似乎错误地认为他正在使用 Windows 上的 android sdk 在 Windows pc 上开发一个 android 应用程序,允许您让它在 Android 环境中工作。请原谅我的无知先生。
      猜你喜欢
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多