2012-09-21 409 views
0

我開發一個應用程序,我想提出一個崩潰恢復功能,重新啓動我的應用程序。我沒有寫任何與此相關的代碼。 我的想法是啓動監視狀態的服務。基於這種方法,問題是因爲服務是從我的應用程序開始的,如果應用程序死亡它將會死亡。 是否可以從我的應用程序啓動服務,並獨立運行它來監視我的應用程序並重新啓動它?崩潰恢復Android應用

回答

1

有幾種方法可以解決你所描述的問題。雖然也許最簡單的是爲您的項目提供自定義Application類,並在其onCreate()方法,調用Thread.setDefaultUncaughtExceptionHandler(this);你的類指派默認的異常處理程序。這將要求您覆蓋public void uncaughtException(Thread t, Throwable e),這將在您崩潰時被調用,並且您可以安排重新啓動。

如果你真的想你外面過程監控的東西的東西,一種方法是在你的應用程序中的服務,它被定義爲具有其自身的進程;這是通過AndroidManifest屬性完成的。

另一種選擇是使用Android AlarmManager,作爲被系統處理,可以重新啓動應用程序。

+0

AlarmManager我相信如果我的應用程序安排好了,它可能是一個解決方案。使用Thread.setDefaultUncaughtExceptionHandler我可以使用,如果我集中在一個地方異常處理。對我來說使用服務是個好主意:我發現這個[link](http://stackoverflow.com/questions/7254720/how-to-restart-an-activity-automatically-after-it-crashes?rq=1 )有用。但我真的很想聽聽其他方法。 – learner

+0

在您的用例中使用AlarmManager會像這樣:當您的應用程序啓動時,您會延遲安排鬧鐘。當該警報觸發時,您驗證應用程序正在運行(或者如果需要,重新啓動它),並重新安排下一次警報。當您的應用程序正常結束時,您會刪除當前的鬧鐘。這個用例只適用於應用程序啓動時啓動的非計劃模型,並在應用程序完成後立即停止(因爲您停止它)。 – mah

-3

您就可以開始您的服務時,手機的靴子用行動android.intent.action.BOOT_COMPLETED註冊意圖過濾器。更多信息可以發現here或類似question

+0

-1:此答案與應用程序崩潰/重新啓動無關。 – mah

+0

它與運行將檢查應用程序狀態的服務有關。爲什麼AlarmManager比服務更好?並有可能在應用 – marwinXXII

+0

我沒說AlarmManager多個線程比服務好,我說這是另一種選擇 - 然而,由於應用程序可以在不破壞未決報警,最好是崩潰。更重要的是,所問的問題不是如何啓動這樣的服務(BOOT_COMPLETED是一個答案),而是關於可能性。你的答案假設他想要在設備啓動時啓動,但他從未說過。他只表示他希望應用程序崩潰恢復; BOOT_COMPLETED表明壽命比它應該長得多的東西,浪費資源,並減慢人們的手機。 – mah