Activity,Fragment狀態保存

Activity android:alwaysRetainTaskState     用法html

用來標記Activity所在的Task的狀態是否老是由系統來保持——「true」,表示老是;「false」,表示在某種情形下容許系統恢復Task 到它的初始化狀態。默認值是「false」。這個特性只針對Task的根Activity有意義;對其它Activity來講,忽略之。     通常來講,特定的情形如當用戶從主畫面從新選擇這個Task時,系統會對這個Task進行清理(從stack中刪除位於根Activity之上的全部Activivity)。典型的狀況,當用戶有一段時間沒有訪問這個Task時也會這麼作,例如30分鐘。     然而,當這個特性設爲「true」時,用戶老是能回到這個Task的最新狀態,不管他們是如何啓動的。這很是有用,例如,像Browser應用程序,這裏有不少的狀態(例如多個打開的Tab),用戶不想丟失這些狀態。 Fragment setRetainInstance() 爲何會在這兒花必定的篇幅詳細說明setRetainInstance()方法呢?由於此方法能夠有效地提升系統的運行效率,對流暢性要求較高的應用能夠適當採用此方法進行設置。 Fragment有一個很是強大的功能——就是能夠在Activity從新建立時能夠不徹底銷燬Fragment,以便Fragment能夠恢復。在onCreate()方法中調用setRetainInstance(true/false)方法是最佳位置。當Fragment恢復時的生命週期如圖1-6所示,注意圖中的紅色箭頭。當在onCreate()方法中調用了setRetainInstance(true)後,Fragment恢復時會跳過onCreate()和onDestroy()方法,所以不能在onCreate()中放置一些初始化邏輯,切忌! activity在什麼狀況下被銷燬?     用戶按回退鍵     調用finish     放在回退棧中過久     橫豎屏切換 前面兩種狀況下     系統會認爲用戶再也不須要這個activity了,因此在銷燬時不會作任何事     沒有任何瀏覽方法能倒回去,只能再次啓動該app 在第3、四種狀況下     用戶能夠經過回退鍵或其餘方式瀏覽回去     系統會用bundle保存activity的佈局狀態包括view狀態     而後銷燬activity,並在重建activity時恢復之前的狀態,無需編程     可是注意,系統銷燬前不必定能保存全部用戶但願保存的數據     系統提供onSaveInstanceState()方法給用戶保存額外的數據     提供onRestoreInstanceState()方法用於重建時恢復     可是上述方法僅僅保存少許鍵值對數據,沒法保留大量數據     系統提供onRetainNonConfigurationInstance()用於保留大量的數據     提供getLastNonConfigurationInstance()用戶恢復數據     注意這個方法不能傳遞和context有關的東西,好比view、adapter等等,不然會泄露內存     只能保存自定義的MyDataObject     注意這個方法已經 deprecated in API level 13. 官網推薦了下述fragment的方法 activity上面有fragment的狀況     官方大力推薦使用fragment來實現模塊化,若是activity上面有fragment     那麼有一個在銷燬重建activity時透傳fragment狀態的方法 setRetainInstance()     方法解釋在 http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)     簡單實踐了一下,彷佛存在一些問題,可能和activity與fragment的鏈接和分工有關     彷佛從fragment到activity方向的鏈接或指針正常     可是從activity到fragment的鏈接或指針卻不對了,activity沒法更新fragment     在個人項目的實踐結果是          fragment上面的數據,好比listview,本來和下面的activity裏面的list是對應的,可是透傳以後不對應了     網上找到一些相關討論。stackoverflow上面相關討論          http://stackoverflow.com/questions/11160412/why-use-fragmentsetretaininstanceboolean          http://stackoverflow.com/questions/11182180/understanding-fragments-setretaininstanceboolean?lq=1          http://stackoverflow.com/questions/5996446/fragments-setretaininstancetrue-and-threaded-libraries     一篇專門的博客 Handling Configuration Changes with Fragments          http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html 防止activity被銷燬重建     橫豎屏切換時          橫豎屏切換時致使activity銷燬和重建          這個動做的目的是擔憂activity的佈局及資源不適合橫豎屏切換          經過銷燬重建給程序一個機會來適配          但實際上,若是佈局和資源沒有和橫豎屏綁定的話          其實不必作這個銷燬,徹底能夠取消這個至關危險的操做          取消方法是在activity的屬性中添加 android:configChanges="orientation|screenSize"     放在回退棧中過久          android:alwaysRetainTaskState="true" ----- 始終維持activity的狀態          彷佛這個屬性可用,但我不很確定          注意文檔說明這個方法只對任務棧中第一個activity有效android

相關文章
相關標籤/搜索