2011-05-18 11 views
6

我有一個非常無聊的問題。當我的應用程序切換到後臺,有時進程被殺死的logcat中顯示:Android生命週期 - ActivityManager殺死進程 - >從後臺返回異常

INFO/ActivityManager(187): Low Memory: No more background processes. 
INFO/ActivityManager(187): Process com.app.myapp (pid 20681) has died. 
INFO/WindowManager(187): WIN DEATH: Window{40592708 com.app.myapp/app.myapp.dashboard.Dashboard paused=false} 
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Consumer closed input channel or an error occurred. events=0x8 
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Channel is unrecoverably broken and will be disposed! 
INFO/WindowManager(187): WIN DEATH: Window{408b1d40 app.myapp/app.myapp.menus.products.Promotions paused=false} 
INFO/ActivityManager(187): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=app.myapp/.Main } from pid 187 
INFO/ActivityManager(187): Start proc app.myapp for activity app.myapp/.menus.products.Promotions: pid=20721 uid=10062 gids={3003, 1015} 

當我再嘗試返回到應用程序,通過任務切換(長按HOME)它試圖返回到最後打開活動......和崩潰。

爲什麼它從頭開始打開整個應用程序關閉時的Main?

ERROR/InputDispatcher erros並不總是顯示。

UPDATE:

問題是...應用程序恢復,但已下載(作爲一個HashMap)在它的對象是不是......所以,當我訪問他們。我有「問題」 ......

更新2:

我管理由verifing上的onCreate上BaseActivity(由隔日延長)如果應用程序中包含的數據來解決問題我需要或者它是空的(在這種情況下,它重新啓動應用程序)。

是否有一個更優雅的解決方案,或者至少有一種方式說,設備如果應用程序被殺害,我希望應用程序被重新啓動?

此鏈接有助於理解這個問題......並且知道有如何將數據從應用商店沒有明確的答案:How to declare global variables in Android?

更新3:

於是我問了一個問題的具體如何正確保存應用程序數據。這可能會幫助那些有同樣問題的人:Android: Best way to save data stored in Application Singleton Class

+0

http://stackoverflow.com/questions/6025554/android-application-loses-state-after-launching-another-intent/6025590#6025590 – superfell 2011-05-18 15:39:51

+0

該鏈接ALMOST回答我的問題..問題是我有數據存儲在應用程序類..當應用程序類恢復不是。 – neteinstein 2011-05-18 16:05:00

+0

這也是有用的,但它並沒有考慮使用什麼方法:http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables – neteinstein 2011-05-19 18:44:22

回答

3

據我瞭解,它回來是因爲用戶沒有關閉應用程序。答:您是否正在訪問從開始活動傳遞的活動中的包數據?如果是這樣的話,您可能需要查看可以實現的捆綁包實例保存和恢復功能,以解決以無效狀態返回到前臺的應用程序。

爲清晰起見進行編輯:應用程序恢復到之前的狀態,因爲它在後臺處於內存不足狀態時被操作系統殺死。在任務切回時,它將恢復到之前的狀態,並且當該活動恢復時,無效/不存在的軟件包數據可能導致崩潰。

+0

但是活動堆棧歷史怎麼樣?如果我在那之後按回來,即使它沒有崩潰..它會關閉嗎?因爲這是唯一開放的活動?還是我錯了? – neteinstein 2011-05-18 15:57:48

+0

編輯問題以解決您的問題。 – neteinstein 2011-05-18 15:59:34

+0

http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState閱讀。它談論onSaveInstanceState並暫停您的應用程序。這是優雅的解決方案。檢測暫停,保存我們的狀態。在簡歷中,您有機會重新初始化,而無需重新加載。我不確定您的評論的活動歷史記錄部分。你必須嘗試一下 – jlindenbaum 2011-05-18 16:36:13