天天看點

Activity 狀态儲存一. 相關方法簡介二 代碼示例

Android 開發之 Activity 狀态儲存 OnSaveInstanceState參數解析
2014-08-12       0  個評論    來源:讓學習成為一種習慣  
收藏    
Activity 狀态儲存一. 相關方法簡介二 代碼示例
我要投稿

一. 相關方法簡介

1. 狀态儲存方法示例

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

package

com.example.octopus_saveinstance;

import

android.app.Activity;

import

android.os.Bundle;

public

class

MainActivity

extends

Activity {

@Override

protected

void

onCreate(Bundle savedInstanceState) {

super

.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

@Override

protected

void

onRestoreInstanceState(Bundle savedInstanceState) {

super

.onRestoreInstanceState(savedInstanceState);

}

@Override

protected

void

onSaveInstanceState(Bundle outState) {

super

.onSaveInstanceState(outState);

}

}

2. 相關方法介紹

(1) onCreate(Bundle savedInstanceState) 方法

Activity 建立時回調 : 該方法會自動傳入一個 Bundle 對象, 該 Bundle 對象就是上次被系統銷毀時在 onSaveInstanceState 或者 onRestoreInstanceState 中儲存的資料;

-- 注意 : 隻有是系統自動回收的時候才會儲存 Bundle 對象資料;

-- Bundle 對象來源 : onCreate() 方法中的 Bundle 對象參數, 是在 onSaveInstance() 或者 onRestoreInstanceState() 方法中儲存的 Bundle 對象;

.

(2) onSaveInstanceState(Bundle outState) 方法

outState 參數作用 :

-- 資料儲存 : Activity 聲明周期結束的時候, 需要儲存 Activity 狀态的時候, 會将要儲存的資料使用鍵值對的形式 儲存在 Bundle 對象中;

-- 恢複資料 : 在 Activity 的 onCreate()方法 建立 Activity 的時候會傳入一個 Bundle 對象, 這個 Bundle 對象就是這個 outState 參數;

調用時機 : Activity 容易被銷毀的時候調用, 注意是容易被銷毀, 也可能沒有銷毀就調用了;

-- 按下Home鍵 : Activity 進入了背景, 此時會調用該方法;

-- 按下電源鍵 : 螢幕關閉, Activity 進入背景;

-- 啟動其它 Activity : Activity 被壓入了任務棧的棧底;

-- 橫豎屏切換 : 會銷毀目前 Activity 并重新建立;

onSaveInstanceState方法調用注意事項 :

-- 使用者主動銷毀不會調用 : 當使用者點選回退鍵 或者 調用了 finish() 方法, 不會調用該方法;

-- 調用時機不固定 : 該方法一定是在 onStop() 方法之前調用, 但是不确定是在 onPause() 方法之前 還是 之後調用;

-- 布局中元件狀态存儲 : 每個元件都 實作了 onSaveInstance() 方法, 在調用函數的時候, 會自動儲存元件的狀态, 注意, 隻有有 id 的元件才會儲存;

-- 關于預設的 super.onSaveInstanceState(outState) : 該預設的方法是實作 元件狀态儲存的;

(3) onRestoreInstanceState(Bundle savedInstanceState) 方法

方法回調時機 : 在 Activity 被系統銷毀之後 恢複 Activity 時被調用, 隻有銷毀了之後重建的時候才調用, 如果記憶體充足, 系統沒有銷毀這個 Activity, 就不需要調用;

-- Bundle 對象傳遞 : 該方法儲存的 Bundle 對象在 Activity 恢複的時候也會通過參數傳遞到 onCreate() 方法中;

-- 位于生命周期位置吧 : 該方法在 onResume() 方法之前儲存資訊;

二 代碼示例

Activity 主要代碼 :

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

package

com.example.octopus_saveinstance;

import

android.app.Activity;

import

android.os.Bundle;

public

class

MainActivity

extends

Activity {

@Override

protected

void

onCreate(Bundle savedInstanceState) {

super

.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if

(savedInstanceState !=

null

)

System.out.println(onCreate() :  + savedInstanceState.getString(octopus));

}

@Override

protected

void

onRestoreInstanceState(Bundle savedInstanceState) {

super

.onRestoreInstanceState(savedInstanceState);

System.out.println(onRestoreInstanceState() :  + savedInstanceState.getString(octopus));

}

@Override

protected

void

onSaveInstanceState(Bundle outState) {

super

.onSaveInstanceState(outState);

outState.putString(octopus, www.octopus.org.cn);

System.out.println(onSaveInstanceState() : save date www.octopus.org.cn);

}

}

運作結果 : 在運作的過程中 旋轉螢幕;

?

1 2 3

I/System.out(

8167

): onSaveInstanceState() : save date www.octopus.org.cn

I/System.out(

8167

): onCreate() : www.octopus.org.cn

I/System.out(

8167

): onRestoreInstanceState() : www.octopus.org.cn

作者 : 韓曙亮

轉載請著名出處 : http://blog.csdn.net/shulianghan/article/details/38297083

繼續閱讀