2013-09-26 65 views
3

好的,所以我正在開發一個帶有新聞的Android應用程序。當用戶第一次運行App時,會運行一個單獨的線程,然後啓動一個無限的while(true)循環,在循環內部,連接器將文本從Internet下載到通知併發送此通知,然後休眠8小時。哪種方式更好地使其工作得最好,如上所述的線程或報警管理器?或者,也許有一種不同的更好的方式?Android - 線程與AlarmManager

現在我已經完成了兩種測試方法,兩種方法都很好,但我不知道如何檢查哪一個效率更高,哪些不會被android殺死,哪些食物消耗更少等。

第二個問題,有人殺應用程序時是否有任何方法來恢復循環?我正在使用Advanced Task Killer Free和一款Flashy應用程序(Flash Player Loader)進行測試。我殺死了Flashy,但5秒鐘後,應用程序再次運行,所以它可能是可能的,但是如何?

對於那些認爲我正在開發煩人廣告的人,我正在開發的應用程序只是從互聯網上閱讀新聞。

希望有人幫助, 在此先感謝。

+3

爲什麼不使用警報管理器的意圖服務.intent服務有助於完成網絡工作並在工作完成時自動關閉。並且警報管理員有助於在需要時再次喚醒服務。 – Ranjit

+0

'然後睡8個小時'親愛的上帝,請不要這樣做。 – Falmarri

回答

1

在你的情況下,我一定會使用報警管理器。 作爲一般的經驗法則,如果您的應用程序「睡眠」並且經常長時間檢查新內容(8小時很長時間),則應使用警報管理器。

這樣,您的應用程序無需在後臺運行,因此電池壽命得以保留,並且應用程序的功能不會受到Android在低內存情況下終止服務的影響。

關於你的第二個問題 - 如果Android系統由於內存不足而殺死一個服務,它將盡快重啓。但是,如果您手動終止服務,則不應重新啓動服務,即使可能通過一些黑客入侵。

6

主題VS AlarmManager

AlarmManager

按照Android的文檔

報警管理器是用於在您希望您的 應用程序代碼運行在特定的時間的情況下,即使你的應用程序是 目前沒有運行。

所以你在這裏的好處是,你可以在未來執行特定的任務,即使你的應用程序是不是在運行狀態。(在這裏,你可以自豪地稱自己良好的android公民,因爲你不居住在android系統內存來獲得你的任務完成了)。你只是告訴android我想在特定的時間執行這個任務,Android會在那個特定的時間自動啓動你的應用程序,即使它沒有運行。

如果你想讓線程達到同樣的效果,那麼你的線程應該是活着的,直到時間任務沒有開始執行(缺點是android不會殺死線程,直到時間進程還活着,你的腳步就會不必要吃掉記憶)。

希望這會消除你的疑惑。

+1

好的建議Vipul很好的解釋。我同意你+1 – Ranjit