2015-08-09 206 views
0

我刚刚测试了一个几乎为空的安卓项目守护线程在关闭应用程序后仍然活着

我在主要活动中创建了一个守护进程线程。

启动应用程序,并按下手机上的后退按钮关闭应用程序。

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

守护线程可以很好地运行在空的JAVA PROJECT

但与android,不起作用。

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

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

有谁知道如何解决这个问题?

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

我第一次从android开发的一些示例代码中了解到守护线程。

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

Android开发人员是否相信守护进程线程会被杀死?

回答

2

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

推测,你没有cancel()这个线程。你需要在适当的时候这样做。

但与android,不起作用。

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

有谁知道如何解决这个问题?

拨打cancel()在适当的位置在您的主题上。

+0

谢谢您的回复CommonsWare!但我不了解你。首先,我不知道'cancel()'是什么。我只知道stop()和interrupt()方法。其次,我正在测试一个空的项目,所以我认为按下后退按钮可以停止所有的线程,我不需要编写任何线程。第三,我计划使用守护线程,因为我认为我不需要代码来停止特定的线程。如果我必须取消该线程,那么对我使用守护进程没有任何好处。 – Jenix

+0

@Jenix:我对方法名称表示歉意。我正在考虑'AsyncTask',它使用'cancel()'。 “我认为按下后退按钮可以停止所有线程,我不需要为线程编码” - 不。导航(BACK,HOME等)对线程没有直接影响。它们可能会影响进程的生命周期,但如果要在活动被破坏时停止后台线程,则需要自己处理。 “如果我必须取消线程,那么对我使用守护进程没有好处” - 同意。 – CommonsWare

+0

@Jenix:“在'App info'中点击'Force stop'按钮,应用程序和线程都不见了!” - 这是因为“强制停止”会终止您的过程。 “Android开发者是否认为守护进程线程会被杀死?” - Android开发人员不使用守护线程。我们需要比我们更好地控制我们的线程寿命。 – CommonsWare

2

按下后退按钮不会关闭应用程序(假设关闭意味着进程终止)。这只完成一项活动,但进程仍在运行。 要实现所需的行为,可以使用例如。 AsyncTask,并通过适当回调您的活动,例如致电cancel()。在onDestroy()onBackPressed(),如果你有兴趣后退按钮按下。

+0

我懂了!谢谢koral! – Jenix

1

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

Java Applicatioin Process Hangs on Windows and Cached Thread Pool

+0

Android设备不使用“ctrl + alt + delete”。 – CommonsWare

+0

我意识到了这一点,不过,我错误地认为,他认为他正在Windows上使用android sdk在Windows上开发android应用程序,以便让您在Android环境中工作。请原谅我的无知。 – fuzzzy37

相关问题