2011-01-20 164 views
0

我原本問這裏的問題:
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時調用在縱向模式下,應用程序無法正常關閉。

/金

+0

請使用「和」按鈕設置您的問題的格式。 – 2011-01-20 07:47:14

回答

0

它實際上是因爲我忘了釋放在C++代碼的某些內存時出現此錯誤。現在它終於不再崩潰,雙生命週期問題再也無關緊要了。

相關問題