2015-08-09 146 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

相關問題