2010-01-22 31 views
2

爲了在我的android應用中保持狀態,以便用戶將返回到他們停止的活動,我在我的清單中設置了非常有用的標誌alwaysRetainTaskState:當系統殺死活動時帶有全局變量的Android持久狀態

<activity android:name=".Main" 
       android:label="@string/app_name" 
       android:alwaysRetainTaskState="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

這樣做可以完成工作,或者我想;我發現系統仍然可以銷燬應用程序的活動以保留內存,同時保持狀態。爲了驗證這一點,我寫了一個小測試應用程序,在循環中創建了一大堆活動,以查看我的應用程序的活動是否會被破壞。系統肯定會破壞我的活動。

隨着一些閱讀,我發現我需要使用onSaveInstanceState()和onRestoreInstanceState()來幫助維護活動狀態。

爲了解決我的問題,我們假設我有一個包含多個全局變量的活動,其中一些是靜態的,另一些則不是。它們由布爾值,數組列表,字符串等組成。我的問題是,我很困惑哪些變量在活動被破壞時是持久的。哪些應該打包到onSaveInstanceState()中的包中?當一項活動被破壞時,系統是否會對這些變量做任何事情?

回答

5

讓我們說我有一個 一些全局變量的活動,一些 他們是靜態的,有些則不是。

在Java中沒有這樣的東西作爲「全局變量」。儘可能避免非最終(即可變)的靜態數據成員。

哪個應該打包到onSaveInstanceState()中的 包中?

這是不可能在摘要中回答的。

系統是否做任何事情,這些 變量時的活動 破壞?

可能。只要進程存在,靜態數據成員就會存活。當你的最後一個活動被銷燬時,你的過程將在不久的將來終止,這些靜態數據成員將被淘汰。在您的應用程序的下一次運行中,這些靜態數據成員將被重新初始化。

+0

是的我不清楚我想要打包到包中。我的意思是說:是否需要保存靜態變量?做非靜態?從你所說的,當調用saveInstanceState()時,靜態成員將不需要保存。當一個活動被銷燬時,非靜態變量是否會持續存在? – jlim 2010-01-22 16:32:07

+0

對不起 - 我還試圖確定什麼是確保在我的應用程序中執行的一些用戶操作的最佳方式,即向主視圖添加動態視圖(實際的appWidgets)將被記住,而不管它是什麼。我不清楚它是否像保存的實例狀態那麼簡單,或者如果我需要一些其他類型的魔法來保留它們的選擇並以某種方式重建它們 – mylock 2010-02-18 07:09:12