自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何保存和恢復(fù)Activity狀態(tài)緩存

存儲(chǔ) 存儲(chǔ)軟件
非正常行為而破壞了Activity,那么盡管實(shí)際 Activity已經(jīng)消失,但是系統(tǒng)還是會(huì)記住它已經(jīng)存在。

[[435365]]

前言

非正常行為而破壞了Activity,那么盡管實(shí)際 Activity已經(jīng)消失,但是系統(tǒng)還是會(huì)記住它已經(jīng)存在;

這樣如果用戶導(dǎo)航回到它,系統(tǒng)會(huì)創(chuàng)建一個(gè)新的的Activity使用一組保存的數(shù)據(jù)來描述Activity在被銷毀時(shí)的狀態(tài);

系統(tǒng)用于恢復(fù)以前狀態(tài)的已保存數(shù)據(jù)稱為“實(shí)例狀態(tài)”;

今天我們來詳細(xì)介紹下;

一、如何保存臨時(shí)數(shù)據(jù)

1、核心方法

  1. onSaveInstanceState() 

2、調(diào)用時(shí)機(jī)

  • 非正常行為而破壞了Activity,則會(huì)被系統(tǒng)調(diào)用;
  • 當(dāng)您的Activity開始停止時(shí),系統(tǒng)會(huì)調(diào)用,onSaveInstanceState()以便您的Activity可以使用一組鍵值對(duì)來保存狀態(tài)信息;
  • 此方法的默認(rèn)實(shí)現(xiàn)保存有關(guān)Activity視圖層次結(jié)構(gòu)狀態(tài)的信息,例如EditText小部件中的文本或ListView的滾動(dòng)位置;
  • 為了保存Activity的附加狀態(tài)信息,您必須實(shí)現(xiàn)onSaveInstanceState()并向?qū)ο筇砑渔I值對(duì)Bundle;

3、使用說明

  1. static final String STATE_SCORE = "playerScore"
  2. static final String STATE_LEVEL = "playerLevel"
  3. ... 
  4. @Override 
  5. public void onSaveInstanceState(Bundle savedInstanceState) { 
  6.     // 保存用戶自定義的狀態(tài) 
  7.     savedInstanceState.putInt(STATE_SCORE, mCurrentScore); 
  8.     savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); 
  9.     // 調(diào)用父類交給系統(tǒng)處理,這樣系統(tǒng)能保存視圖層次結(jié)構(gòu)狀態(tài) 
  10.     super.onSaveInstanceState(savedInstanceState); 

二、如何恢復(fù)臨時(shí)數(shù)據(jù)

1、核心方法

  1. onRestoreInstanceState() 

2、調(diào)用時(shí)機(jī)

  • 銷毀了你的Activity,則重新啟動(dòng)時(shí)會(huì)被系統(tǒng)調(diào)用;
  • 當(dāng)您的Activity在之前被破壞后重新創(chuàng)建時(shí),您可以從Bundle系統(tǒng)通過您的Activity中恢復(fù)您的保存狀態(tài);
  • 這兩個(gè)方法onCreate()和onRestoreInstanceState()回調(diào)方法都會(huì)收到Bundle包含實(shí)例狀態(tài)信息的相同方法;

說明:

  • 與onSaveInstanceState()區(qū)別:此處是 “確實(shí)銷毀”后才調(diào)用
  • 若是 被用戶主動(dòng)銷毀(如 用戶按Back鍵),則不會(huì)調(diào)用
  • 肯定在調(diào)用 onStop()前被調(diào)用

3、調(diào)用場景

因?yàn)閛nCreate()調(diào)用該方法是否系統(tǒng)正在創(chuàng)建一個(gè)新的Activity實(shí)例或重新創(chuàng)建一個(gè)以前的實(shí)例,所以您必須Bundle在嘗試讀取之前檢查該狀態(tài)是否為空。如果它為空,那么系統(tǒng)正在創(chuàng)建一個(gè)Activity的新實(shí)例,而不是恢復(fù)之前被銷毀的實(shí)例;

  1. @Override 
  2. protected void onCreate(Bundle savedInstanceState) { 
  3.     super.onCreate(savedInstanceState); // 記得總是調(diào)用父類 
  4.     // 檢查是否正在重新創(chuàng)建一個(gè)以前銷毀的實(shí)例 
  5.     if (savedInstanceState != null) { 
  6.         // 從已保存狀態(tài)恢復(fù)成員的值 
  7.         mCurrentScore = savedInstanceState.getInt(STATE_SCORE); 
  8.         mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); 
  9.     } else { 
  10.         // 可能初始化一個(gè)新實(shí)例的默認(rèn)值的成員 
  11.     } 
  12.     ... 

系統(tǒng)onRestoreInstanceState()只有在存在保存狀態(tài)的情況下才會(huì)恢復(fù),因此您不需要檢查是否Bundle為空

  1. public void onRestoreInstanceState(Bundle savedInstanceState) { 
  2.     // 總是調(diào)用超類,以便它可以恢復(fù)視圖層次超級(jí) 
  3.     super.onRestoreInstanceState(savedInstanceState); 
  4.     // 從已保存的實(shí)例中恢復(fù)狀態(tài)成員 
  5.     mCurrentScore = savedInstanceState.getInt(STATE_SCORE); 
  6.     mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); 

總結(jié)

 

onSaveInstanceState方法是Activity的生命周期方法,主要用于在Activity銷毀時(shí)保存一些信息;

 

責(zé)任編輯:武曉燕 來源: Android開發(fā)編程
相關(guān)推薦

2014-08-08 10:36:12

ActivityAndroid

2017-11-01 15:13:49

TensorFlow神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2023-10-31 09:07:16

備忘錄模式保存

2009-09-01 18:06:06

c#保存窗體狀態(tài)

2019-10-08 11:10:18

React自動(dòng)保存前端

2018-08-13 10:17:01

LinuxGit命令倉庫

2012-12-31 09:42:39

2012-02-08 11:01:53

HibernateJava

2012-08-06 10:04:24

ASP.NET

2018-12-27 10:00:37

Windows10Office文檔

2010-02-23 14:24:50

WCF狀態(tài)保存

2009-12-21 18:02:02

WCF狀態(tài)保存

2022-03-18 14:09:52

ReactJavaScript

2020-10-27 11:00:57

LinuxRAM緩存

2011-08-04 18:27:55

注冊(cè)表

2014-08-21 11:07:40

AndroidActivity銷毀

2022-10-20 13:05:53

patches文件生成

2023-06-25 18:52:48

2018-06-27 14:40:50

Windows 10Windows存儲(chǔ)空間

2011-05-24 10:11:30

MySQLMongoDB
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)