編輯:關於Android編程
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); } }
Activity 創建時回調 : 該方法會自動傳入一個 Bundle 對象, 該 Bundle 對象就是上次被系統銷毀時在 onSaveInstanceState 或者 onRestoreInstanceState 中保存的數據;
-- 注意 : 只有是系統自動回收的時候才會保存 Bundle 對象數據;
-- Bundle 對象來源 : onCreate() 方法中的 Bundle 對象參數, 是在 onSaveInstance() 或者 onRestoreInstanceState() 方法中保存的 Bundle 對象;
.
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) : 該默認的方法是實現 組件狀態保存的;
方法回調時機 : 在 Activity 被系統銷毀之後 恢復 Activity 時被調用, 只有銷毀了之後重建的時候才調用, 如果內存充足, 系統沒有銷毀這個 Activity, 就不需要調用;
-- Bundle 對象傳遞 : 該方法保存的 Bundle 對象在 Activity 恢復的時候也會通過參數傳遞到 onCreate() 方法中;
-- 位於生命周期位置吧 : 該方法在 onResume() 方法之前保存信息;
Activity 主要代碼 :
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); } }
運行結果 : 在運行的過程中 旋轉屏幕;
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
一、批量打包1、集成了友盟統計,並在AndroidManifest.xml中添加了如下代碼<meta-dataandroid:name=UMENG_CHANNELa
無論是定制系統還是自行開發APP的UI,其無論是使用標准UI還是自定義UI,最終都是需要自己熟悉主題風格的各種屬性設置,不過屬性非常的多,如果需要知道某個UI可以臨時查看
先上結果圖: 首先是布局文件main.xml: <frameLayout andr
Fragment必須總是被嵌入到一個Activity中,並且它的生命周期直接受宿主Activity生命周期的影響。本文內容可以分為下面的幾部分:使用支持庫創建