2015-09-17 86 views
0

我有android應用程序與幾個服務。 此應用程序應該在此應用程序啓動並停止時向遠程服務器發送報告。 但我不知道如何確定應用程序已停止,因爲可能會停止應用程序(例如壓縮),但服務仍在運行。 我認爲算法應該是這樣的:如何確定何時Android應用程序已啓動,何時停止

  1. 檢查與存儲最後日期標記(如果這個標誌存在 - 發送「停止」時間服務器)
  2. 發送「開始」消息在服務器上,當應用程序啓動
  3. 每10分鐘應用程序應該寫入當前日期和時間標記磁盤

如果我將創建服務,該檢查 - 當有低內存的Android可以殺死這種單一的服務,但應用程序可以運行。如果我將在Application類中創建ScheduledExecutorService - 應用程序可以停止,但服務仍可以運行。

你能幫我解決嗎?

回答

0

這個問題確實沒有一個答案。在這裏曾經有很多很多次的問題,但我們可以說的確實取決於我們應用的行爲。

你想放一些Log消息在onPause()onStop()onDestroy()Activity,並onDestroy()Service。通過查看Logcat中打印的日誌,仔細觀察應用程序的流程。

很多人試圖依靠onDestroy()方法,因爲它看起來像是在應用程序完全終止時調用的,但情況並非總是如此。有時應用程序崩潰(強行關閉),或者有些人只是手動強制關閉設置中的應用程序信息。在這種情況下,應用不會遵循活動的生命週期。

其中一個建議是創建一個在後臺運行的線程並將UDP數據包發送到服務器,表示該應用程序每隔幾秒鐘都處於活動狀態。

PRO:您不需要與服務器進行握手,因此可以節省從服務器獲取響應的時間/資源。

CON:線程運行背景確實使用電池。 UDP只能在最近的Android操作系統的WiFi環境中使用。

希望你找到一個好方法。當你找到一個好的解決方案時,你可能想對你的文章發表評論,因爲人們也想知道如何解決它。

0

爲什麼不嘗試信任標準方法Activity? enter image description here

您應該接近onDestroy和/或onPause。這取決於你的邏輯。

另外,您可以嘗試覆蓋Application.onTerminate()。你可以閱讀它(應用程序)lifecycle here

+0

等待。假設應用程序有10個活動,並且當我打開第二個活動時 - 第一個活動可以被銷燬,但整個應用程序仍在運行 – user788660

+0

首先,保留(Application.onTerminate())。其次,您可以控制「實時」活動的數量。 – user2413972

相關問題