我有一個activity的onCreate方法調用Init函數(該函數調用一些涉及很多東西的本地代碼並調用openSLES音頻api)。問題的關鍵是,這個Init函數在再次調用時會導致應用程序崩潰,這種情況發生在屏幕旋轉上,或者當我使用Back按鈕關閉該活動並重新啓動它時(但是如果在此期間該進程被終止,我沒有麻煩)。我無法改變Init函數的承載。如何檢查onCreate以前的android進程是否一樣被殺死?
我發現當活動被破壞時我沒有殺死這個進程,我在閱讀文檔後期待這樣做,這是一件好事,因爲 - 如果有一些音頻信號正在播放 - 在活動結束後繼續播放破壞了,這對我的目的有好處。
我試圖執行使用了的onSaveInstanceState初始化狀態的檢查,但效果很好只能在屏幕旋轉,當是的onSaveInstanceState叫那。當我按下後退按鈕時,不會調用回調。
,所以我嘗試使用共享偏好,執行狀態的onPause節約。但是在這一點上,我有相反的問題:如果進程被終止,共享首選項值將保留,但在這種情況下,我需要再次執行Init以使應用程序正常工作。
我想我需要一種方法來知道,如果一個進程終止或不後創建我的活動,但此刻我看不出。我想在onPause方法中使用bundle實例,但我無法確定這是否可行。任何類型的提示都會非常感激。
你不能在onPause/init onResume中釋放那個東西嗎?應該只有一個實例處於這種狀態。或者把整個東西變成一個服務,因爲這些東西總是單個實例 – zapl 2012-04-23 16:53:32
我不能釋放「那個東西」(這是一個很好的方式來命名:)),既不在onPause也不在其他任何地方,我只能依靠它在進程終止後安全地調用。服務選項聽起來像是對我的需求矯枉過正,但我開始考慮它。 – athos 2012-04-23 17:04:10
一個簡單的本地(意圖)服務只是一些代碼行,你可以在一個活動中啓動它,在下一個活動中停止它,因爲它的生命週期不與活動相關聯。它們非常適合背景音樂等不會中斷的事物。嘗試解決Activity生命週期當然是可能的,但我不認爲這是一個乾淨的解決方案。 – zapl 2012-04-23 17:09:31