日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發(fā)布時間:2025/6/15 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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被停止了并且很久沒被使用,或者前臺的系統(tǒng)需要更多的資源,系統(tǒng)也可能會銷毀你的activity。

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

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

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

  • 警告:通常需要調用onRestoreInstanceState()的父類方法,以便能恢復默認的視圖狀態(tài)。 學習更多在運行中重建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的全部內容,希望文章能夠幫你解決所遇到的問題。

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