日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[Android Training视频系列]2.4 Recreating an Activity

發布時間:2025/6/15 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Android Training视频系列]2.4 Recreating an Activity 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[Android Training視頻系列]2.4 Recreating an Activity

1.主要內容
本講講解onSaveInstanceState與onRestoreInstanceState的使用。

2.視頻講解

http://www.eyeandroid.com/thread-11391-1-1.html

3.翻譯參考
存在一些情況,由于普通的程序行為,你的activity會被銷毀,比如,當用戶點擊Back按鈕,或者自己調用finish()方法。另外,如果activity被停止了并且很久沒被使用,或者前臺的系統需要更多的資源,系統也可能會銷毀你的activity。

當你的activity是因為按Back鍵或者自己結束的,那么系統認為這個activity實例已經是不需要了,因為你的行為明確指出了你要銷毀它。然而,如果系統是強制銷毀你的activity的話,雖然activity實例已經沒有了,不過系統能夠記住它的存在,當用戶從新回到這個程序時,系統會使用activity被銷毀時保存的狀態重新創建一個activity實例。這個系統用來恢復先前狀態的保存數據被稱為“實例狀態”,是一些key-value的集合保存在Bundle對象中。 警告:當用戶旋轉屏幕時,你的activity會被銷毀并且重新創建。因為屏幕配置已經改變,你的activity可能也需要加載另外一些可選擇的資源(比如布局)。 默認情況下,系統使用Bundle實例狀態保存布局中每個View對象的信息(比如EditText對象中的文本值)。所以,如果你的activity對象被銷毀和重新創建時,布局狀態會重新恢復到先前的狀態。不管怎樣,你的activity可能有很多需要恢復的狀態信息,比如追蹤用戶進程的成員變量。 為了你能夠保存一些額外的數據到實例狀態中,這里提供了一個額外的生命周期回調函數,它沒有在前面課程的圖例中顯示出來。這個函數叫onSaveInstanceState(),當用戶離開activity時系統會調用它。當你的activity被意外銷毀時,系統會調用這個函數,函數的Bundle對象會被保存下來,所以你可以添加額外的信息給這個Bundle。然后,如果系統必須重啟這個被銷毀的activity,它就傳遞相同的Bundle對象給activity的onRestoreInstanceState()方法和onCreate()方法。 圖解:當系統開始停止你的activity,它呼叫onSaveInstanceState()(1)方法,因此你可以保存指定的附加狀態數據。如果activity被銷毀了,然后相同的實例要被重新創建,系統傳遞定義在(1)的狀態給onCreate()(2)和onRestoreInsatanceState()(3)。 保存你的activity狀態
當你的activity開始停止,系統就調用onSaveInstanceState(),你可以在這個函數中使用key-value對的集合保存信息。默認函數實現了保存activity的view狀態,比如EditText的文本,或者ListView的滾動條位置。 為了保存附加信息,你必須實現onSaveInstanceState()方法,添加key-value對到Bundle對象中,例如:
  • static?final?String?STATE_SCORE?=?"playerScore";??
  • static?final?String?STATE_LEVEL?=?"playerLevel";??
  • ...??
  • ??
  • @Override??
  • public?void?onSaveInstanceState(Bundle?savedInstanceState)?{??
  • ????//?保存用戶當前游戲狀態??
  • ????savedInstanceState.putInt(STATE_SCORE,?mCurrentScore);??
  • ????savedInstanceState.putInt(STATE_LEVEL,?mCurrentLevel);??
  • ??????
  • ????//?通常調用父類,讓他能保存View的信息。??
  • ????super.onSaveInstanceState(savedInstanceState);??
  • }??

  • 警告:通常需要在onSaveInstanceState()實現中調用它的父類方法,以便能夠實現保存view的信息。 恢復你的activity狀態
    如果你的activity在它被銷毀后重啟,你可以從系統傳遞給你的Bundle中恢復保存的狀態,onCreate()和onRestoreInstanceState()都可以接受到相同的包含實例狀態信息的Bundle。 因為onCreate()函數在系統創建一個新的activity實例或者重新創建前一個activity時都會調用,所以你必須在讀取Bundle前檢查它是否為空,如果是空的,那么系統是創建一個新的實例,如果不是,那么就恢復前一個被銷毀的activity。 例如,這里是onCreate()方法中實現恢復數據:
  • @Override??
  • protected?void?onCreate(Bundle?savedInstanceState)?{??
  • ????super.onCreate(savedInstanceState);?//?Always?call?the?superclass?first??
  • ?????
  • ????//?檢查是否是一個前面銷毀的activity實例。??
  • ????if?(savedInstanceState?!=?null)?{??
  • ????????//?恢復玩家狀態??
  • ????????mCurrentScore?=?savedInstanceState.getInt(STATE_SCORE);??
  • ????????mCurrentLevel?=?savedInstanceState.getInt(STATE_LEVEL);??
  • ????}?else?{??
  • ????????//?為新實例初始化一個默認值??
  • ????}??
  • ????...??
  • }??

  • 你也可以選擇在onRestoreInstranceState()方法中實現,當系統調用完onStart()函數后會調用onRestoreInstranceState(),不過僅僅是當有狀態需要恢復時才會調用,所以你不需要檢查Bundle是否為空:
  • public?void?onRestoreInstanceState(Bundle?savedInstanceState)?{??
  • ????//?調用父類恢復默認的View的狀態??
  • ????super.onRestoreInstanceState(savedInstanceState);??
  • ?????
  • ????//?恢復玩家狀態??
  • ????mCurrentScore?=?savedInstanceState.getInt(STATE_SCORE);??
  • ????mCurrentLevel?=?savedInstanceState.getInt(STATE_LEVEL);??
  • }??

  • 警告:通常需要調用onRestoreInstanceState()的父類方法,以便能恢復默認的視圖狀態。 學習更多在運行中重建activity(比如屏幕旋轉)的知識,可以看這里:Handling Runtime Changes.






    posted on 2012-12-18 00:34 EyeAndroid 閱讀(...) 評論(...) 編輯 收藏

    轉載于:https://www.cnblogs.com/eyeandroid/archive/2012/12/18/2822568.html

    總結

    以上是生活随笔為你收集整理的[Android Training视频系列]2.4 Recreating an Activity的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。