我原本問這裏的問題:
http://www.experts-exchange.com/Programming/Languages/Java/Android/Q_26754261.html
但我想這可能是一個更好的地方問問題。Android應用程序崩潰時重新啓動
我做了一個Android應用程序調用一些本地代碼。當我第一次運行的Android 2.2設備上的應用程序(按圖標),它工作正常,但如果我按後退按鈕,然後再次按它的圖標,應用程序崩潰(從日食信息)將重新啓動應用程序:
01-19 13:21:51.989: INFO/DEBUG(30): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-19 13:21:51.989: INFO/DEBUG(30): Build fingerprint: 'generic/sdk/generic:2.3/GRH55/79397:eng/test-keys'
01-19 13:21:51.989: INFO/DEBUG(30): pid: 354, tid: 381 >>> Test.Application <<<
01-19 13:21:51.989: INFO/DEBUG(30): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000005a
我檢查了本地代碼並沒有看到任何錯誤。該代碼也是我第一次運行它。它與此有關,當按下後退按鈕時並不是所有資源都被釋放。 我,雖然我已經通過的onDestroy(0)將System.exit找到一個簡單的解決問題的方法(),但是這隻能在應用程序處於橫向模式。
在橫向模式下的生命週期是這樣的:
01-15 22:38:29.913: INFO(18062): onCreate
01-15 22:38:30.143: INFO(18062): onResume
Pressed back button
01-15 22:38:34.093: INFO(18062): onPause
01-15 22:38:34.343: INFO(18062): OnDestroy
在縱向模式下的生命週期是這樣的:
01-15 22:41:00.343: INFO(18167): onCreate
01-15 22:41:00.863: INFO(18167): onResume
01-15 22:41:00.913: INFO(18167): onPause
01-15 22:41:00.913: INFO(18167): OnDestroy
01-15 22:41:01.423: INFO(18167): onCreate
01-15 22:41:01.693: INFO(18167): onResume
Pressed back button
01-15 22:41:05.663: INFO(18167): onPause
01-15 22:41:05.963: INFO(18167): OnDestroy
因此,在縱向模式下的事情發生了兩次 - 所以,如果我插入System.exit(0)在onDestroy中,當設備處於直立/縱向模式時,應用程序不會啓動。
我想最好的解決方案是找到真正的原因,爲什麼本機代碼崩潰,但到目前爲止我還沒有找到原因。也許這與低內存有關。我曾嘗試運行Debug.getNativeHeapFreeSize(),並且可用內存量有時非常低,但錯誤消息顯示「故障地址」。
應用程序崩潰後,我按它的圖標,沒有問題再次運行應用程序。因此,該應用程序只能成功啓動您按下圖標的一半時間。
你知道什麼是錯誤的或者是解決方法嗎? 我在這個網站上搜索了一個答案,發現了一些關於雙生命週期問題以及如何獲得JNI堆棧跟蹤的信息。我會再看看它,看看我能否找到原因。如果設備處於縱向模式,但是如果應用程序隨後安裝在沒有這種雙生命週期問題的設備上,我也可以制定醜陋的解決方法,以確保System.exit(0)不會在首次調用onDestroy時調用在縱向模式下,應用程序無法正常關閉。
/金
請使用「和」按鈕設置您的問題的格式。 – 2011-01-20 07:47:14