【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析
作者 : 韓曙亮
轉(zhuǎn)載請著名出處 :?http://blog.csdn.net/shulianghan/article/details/38297083
一. 相關(guān)方法簡單介紹
1. 狀態(tài)保存方法演示樣例
package com.example.octopus_saveinstance;import android.app.Activity; import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);}}
2. 相關(guān)方法介紹?
(1) onCreate(Bundle savedInstanceState) 方法
Activity 創(chuàng)建時回調(diào) : 該方法會自己主動傳入一個 Bundle 對象, 該 Bundle 對象就是上次被系統(tǒng)銷毀時在?onSaveInstanceState 或者?onRestoreInstanceState 中保存的數(shù)據(jù);
-- 注意 : 僅僅有是系統(tǒng)自己主動回收的時候才會保存 Bundle 對象數(shù)據(jù);
-- Bundle 對象來源 : onCreate() 方法中的 Bundle 對象參數(shù), 是在 onSaveInstance() 或者 onRestoreInstanceState() 方法中保存的 Bundle 對象;
.
(2)?onSaveInstanceState(Bundle outState) 方法
outState 參數(shù)作用 :?
-- 數(shù)據(jù)保存 : Activity 聲明周期結(jié)束的時候, 須要保存 Activity 狀態(tài)的時候, 會將要保存的數(shù)據(jù)使用鍵值對的形式 保存在 Bundle 對象中;
-- 恢復(fù)數(shù)據(jù) : 在 Activity 的 onCreate()方法 創(chuàng)建 Activity 的時候會傳入一個 Bundle 對象, 這個 Bundle 對象就是這個 outState 參數(shù);
調(diào)用時機 : Activity easy被銷毀的時候調(diào)用, 注意是easy被銷毀, 也可能沒有銷毀就調(diào)用了;
-- 按下Home鍵?: Activity 進入了后臺, 此時會調(diào)用該方法;
-- 按下電源鍵 : 屏幕關(guān)閉, Activity 進入后臺;
-- 啟動其他 Activity : Activity 被壓入了任務(wù)棧的棧底;
-- 橫豎屏切換 : 會銷毀當前 Activity 并又一次創(chuàng)建;
onSaveInstanceState方法調(diào)用注意事項 :?
-- 用戶主動銷毀不會調(diào)用 : 當用戶點擊回退鍵 或者 調(diào)用了 finish() 方法, 不會調(diào)用該方法;
-- 調(diào)用時機不固定 : 該方法一定是在 onStop() 方法之前調(diào)用, 可是不確定是在 onPause() 方法之前 還是 之后調(diào)用;
-- 布局中組件狀態(tài)存儲 : 每一個組件都 實現(xiàn)了 onSaveInstance() 方法, 在調(diào)用函數(shù)的時候, 會自己主動保存組件的狀態(tài), 注意, 僅僅有有 id 的組件才會保存;
-- 關(guān)于默認的?super.onSaveInstanceState(outState) : 該默認的方法是實現(xiàn) 組件狀態(tài)保存的;
(3)?onRestoreInstanceState(Bundle savedInstanceState) 方法
方法回調(diào)時機 : 在 Activity 被系統(tǒng)銷毀之后 恢復(fù) Activity 時被調(diào)用, 僅僅有銷毀了之后重建的時候才調(diào)用, 假設(shè)內(nèi)存充足, 系統(tǒng)沒有銷毀這個 Activity, 就不須要調(diào)用;
-- Bundle 對象傳遞 : 該方法保存的 Bundle 對象在 Activity 恢復(fù)的時候也會通過參數(shù)傳遞到 onCreate() 方法中;
-- 位于生命周期位置吧 : 該方法在 onResume() 方法之前保存信息;?
二 代碼演示樣例
Activity 主要代碼 :?
package com.example.octopus_saveinstance;import android.app.Activity; import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if(savedInstanceState != null)System.out.println("onCreate() : " + savedInstanceState.getString("octopus"));}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);System.out.println("onRestoreInstanceState() : " + savedInstanceState.getString("octopus"));}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("octopus", "www.octopus.org.cn");System.out.println("onSaveInstanceState() : save date www.octopus.org.cn");}}
執(zhí)行結(jié)果 : 在執(zhí)行的過程中 旋轉(zhuǎn)屏幕;
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
作者?:?韓曙亮
轉(zhuǎn)載請著名出處?:?http://blog.csdn.net/shulianghan/article/details/38297083
轉(zhuǎn)載于:https://www.cnblogs.com/mfrbuaa/p/5346976.html
總結(jié)
以上是生活随笔為你收集整理的【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows Mobile 6.0下实
- 下一篇: python win32com模块