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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android官方开发文档Training系列课程中文版:管理Activity的生命周期之Activity的重建

發布時間:2024/7/5 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android官方开发文档Training系列课程中文版:管理Activity的生命周期之Activity的重建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://android.xsoftlab.net/training/basics/activity-lifecycle/recreating.html#RestoreState

有這么幾個關于activity通過正常渠道銷毀的場景,比如用戶按下了返回按鈕,又或者是在activity中調用了終止信號finish。系統可能也會在activity在停止狀態時銷毀它,也可能會在長時間不使用的時候銷毀它,也可能會當前臺activity需要更多資源時,系統必須關掉后臺進行來恢復內存時銷毀它。

當activity因為用戶按下了返回按鈕或者是自己關閉而被銷毀的話,系統會認為activity的實例是永遠消失了,因為習慣上會認為activity已經不再需要了。然而,如果activity是因為系統資源枯竭而被銷毀的話,盡管activity的實例已經被銷毀了,系統會記得它存在過,以便用戶在返回的時候系統可以創建一個新的activity實例,并且通過上一個activity銷毀時保存的一系列數據來恢復當時的狀態。系統恢復原先的狀態時通過一個名為instance state的對象存儲的數據,它是一個Bundle對象,并以鍵值對的方式存儲數據的集合。

警告:在每次用戶旋轉屏幕的時候,activity會被銷毀并重新創建。當屏幕改變的方向,系統會銷毀并重新創建當前的activity,因為屏幕的配置發生了改變,activity可能需要加載更改后的資源(比如說布局)。

默認情況下,系統使用Bundle對象存儲activity不居中每一個View對象的信息(比如說在EditText中輸入的內容)。所以如果activity對象被銷毀然后重新創建了的話,可以不必再寫多少代碼就可以恢復布局的狀態到原來的狀態。然而,activity可能有更多的狀態信息需要恢復,比如activity中記錄用戶進度的成員變量。

Note:為了使Android系統可以保存activity中view的狀態,每一個VIEW必須擁有唯一的ID,支持android:id屬性。

為了保存activity狀態的附加數據,你必須重寫onSaveInstanceState方法。系統會在用戶離開的時候調用這個方法,并且會傳回一個Bundle對象,這個對象可以用來在activity意外被銷毀的事件中保存下來。如果系統稍后必須創建activity實例,系統會通過onRestoreInstanceState方法和onCreate方法傳遞相同的Bundle對象。

隨著系統開始停止activity,它會調用onSaveInstanceState(1),所以你可以指定一些在稍后恢復的時候所需要的附加狀態數據。如果activity銷毀了,然后一個相同的實例必須重新創建,那么系統會通過onCreate方法(2)和onRestoreInstanceState(3)方法將默認的狀態數據傳遞回來。

存儲Activity的狀態

隨著activity開始進入停止狀態,系統會調用onSaveInstanceState方法,所以activity可以存儲一系列的狀態信息。這個方法的默認實現是保存了一些與activity的view層級相關額信息,比如在EditText空間中的內容,又或者是ListView的滑動位置。

為了保存activity的附加狀態信息,必須實現onSaveInstanceState方法然后添加鍵值對到Bundle對象中:

static final String STATE_SCORE = "playerScore"; static final String STATE_LEVEL = "playerLevel"; ... @Override public void onSaveInstanceState(Bundle savedInstanceState) {// Save the user's current game statesavedInstanceState.putInt(STATE_SCORE, mCurrentScore);savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);// Always call the superclass so it can save the view hierarchy statesuper.onSaveInstanceState(savedInstanceState); }

警告:因為總是調用了onSaveInstanceState的父類實現,所以默認實現可以保存view層級的狀態。

恢復Activity的狀態

如果之前的activity銷毀了之后又重新創建了,可以通過Bundle對象恢復保存的狀態。onCreate方法和onSaveInstanceState方法都會將相同的Bundle對象通過參數回調回來。

因為onCreate方法在系統創建新實例的時候會調用,你必須在嘗試訪問它之前檢查Bundle對象是否為null,如果是null,那說明系統創建了一個新的activity對象,否則就是原來的那個對象被銷毀了這里又重新創建了一個。

以下是如何在onCreate方法中恢復一些狀態數據的例子:

@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // Always call the superclass first// Check whether we're recreating a previously destroyed instanceif (savedInstanceState != null) {// Restore value of members from saved statemCurrentScore = savedInstanceState.getInt(STATE_SCORE);mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);} else {// Probably initialize members with default values for a new instance}... }

除了onCreate方法可以恢復狀態之外,onRestoreInstanceState()方法同樣也可以實現該功能,該方法會在onStart方法之后調用,不過僅僅是在保存了數據之后才會調用,所以你不需要去做Bundle對象是否為null的檢查:

public void onRestoreInstanceState(Bundle savedInstanceState) {// Always call the superclass so it can restore the view hierarchysuper.onRestoreInstanceState(savedInstanceState);// Restore state members from saved instancemCurrentScore = savedInstanceState.getInt(STATE_SCORE);mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); }

警告:因為總是調用了onRestoreInstanceState()的父類實現,所以默認實現可以恢復view層級的狀態。

有關更多因為在運行時的重啟事件而造成的activity重新創建(比如屏幕旋轉)的信息,請參見Handling Runtime Changes。

總結

以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:管理Activity的生命周期之Activity的重建的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 水牛影视av一区二区免费 | 国产精品久久久久毛片软件 | 97成人免费 | 少妇人妻精品一区二区三区 | 男生裸体视频 | 亚洲乱码国产乱码精品精软件 | 橹图极品美女无圣光 | 国产精品乱码妇女bbbb | 国产精品99精品无码视亚 | 精品国产视频一区二区三区 | 好好热视频| 亚洲无卡视频 | 亚洲国产成人在线观看 | 暴操白虎 | 中文字幕欧美人妻精品一区蜜臀 | 福利影院在线 | 国产成人久久婷婷精品流白浆 | 成人一区二区电影 | 97在线免费公开视频 | 一级片成人 | 亚洲精品久久久久中文字幕二区 | 动漫av在线免费观看 | 一区二区三区av在线 | 国产又粗又猛视频 | 秘密基地在线观看完整版免费 | 久色88 | 新超碰在线 | 欧美大浪妇猛交饥渴大叫 | 亚洲国产成人无码av在线 | 波多野结衣免费观看视频 | 少妇高潮一区二区三区99 | 男女激情四射网站 | 亚洲免费福利 | 国产精品美女视频 | 精品无码av一区二区三区不卡 | 日韩有码视频在线 | 中国a级大片 | 熟女少妇精品一区二区 | youjizz在线视频 | 91视频日本 | 日韩免费三级 | 免费看一级 | 日韩成人免费观看 | 97视频人人 | 黄页网站在线播放 | 老牛嫩草二区三区观影体验 | 亚洲一区二区三区久久久 | 国产成人综合一区二区三区 | 岛国av一区二区 | 国产精品1234| 欧美国产激情 | 狠狠五月婷婷 | 国产精品高清网站 | 啪网站| 成人精品免费在线观看 | 激情av| 日本青青草视频 | 国产山村乱淫老妇女视频 | 亚洲永久在线 | 爱上av | 综合久久久久久久 | 好屌妞视频这里只有精品 | 欧美中文字幕在线视频 | 欧美激情自拍 | 黄色三级在线视频 | 狠狠干婷婷 | 日本作爱视频 | 懂色av一区二区在线播放 | 性欧美丰满熟妇xxxx性 | 色丁香婷婷综合久久 | 毛片一级视频 | 亚洲精品乱码久久久久久蜜桃麻豆 | 久一视频在线 | 中国第一毛片 | 婷婷色小说 | 国产视频在线观看网站 | 人妻丝袜一区二区三区 | 一级成人黄色片 | 国产精品国产三级国产在线观看 | 韩国一区二区三区四区 | 亚洲一区二区伦理 | 久久久久久久人妻无码中文字幕爆 | 香蕉污视频 | 91在线精品观看 | 在线观看精品视频 | 性高潮视频在线观看 | 国内精品卡一卡二卡三 | 91久久人澡人人添人人爽欧美 | 黑人巨大精品欧美一区二区 | 97国产免费 | 亚洲国产精品电影 | 蜜臀久久精品久久久用户群体 | 天堂av2019| 美女搞黄视频网站 | 亚洲精品免费视频 | 一级视频毛片 | 777四色| 日日碰| 亚洲成人免费影院 |