編輯:關於Android編程
在Fragment裡面,利用onSaveInstanceState保存數據,並可在onActivityCreated裡面恢復數據。
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
...
if (savedInstanceState != null) {
// Restore the fragment's state here
}
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save the fragment's state here
}
在Activity裡面,利用onSaveInstanceState保存Fragment實例的數據,並可在onCreate裡面恢復數據:
private Fragment myFragment;
public void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState == null) {
// Instantiate fragment
} else {
// Restore the fragment's instance
myFragment = getSupportFragmentManager().getFragment(
savedInstanceState, "fragment");
}
...
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Save the fragment's instance
// fragment instance may be null
if (myFragment != null) {
getSupportFragmentManager().putFragment(outState, "fragment", myFragment);
}
}
實例
首先看一個步驟,如果是人為關閉Activity或者Fragment, 比如點擊了後退鍵,主動關閉當前頁面,就會走 onPause() --> onStop() --> onDestroy() 而onSaveInstanceState() 並不會被調用. onSaveInstanceState() 只有在系統即將要自動清理銷毀Activity或Fragment前才會調用, 比如
1, 由於重力感應 手機從豎屏變為橫屏,
2, 手機點擊Home鍵和長按Home鍵
3, 點擊電源鍵鎖屏時
4, 從當前Activity跳到另一個Activity
5, 應用內存不足即將自動銷毀時等情況
綜合上面的情況,可以看出, onSaveInstanceState() 這個方法適合臨時保存一些非永久性的數據.如果要持久化保存數據,就要將操作放在onStop(), onDestroy()這些方法中去.onSaveInstanceState() 適合的是當前Activity或者Fragment一旦被系統自己銷毀,應用還能在這之前保存一些必要的數據, 並且用戶的操作很快又回到當前這個頁面,這個時候數據並沒有丟失,還能最大程度的恢復之前狀態.這就是這個方法最大的意義.下面上例子做個簡單示例:
在Fragment中:
//系統自動銷毀Fragment前保存必要的數據
@Override
public void onSaveInstanceState(Bundle outState){
<span > </span>super.onSaveInstanceState(outState);
<span > </span>String content = etCon.getText().toString();
<span > </span>outState.putString("inputCon", content);
}
//恢復數據
@Override
public void onViewStateRestored(Bundle savedInstanceState){
<span > </span>super.onViewStateRestored(savedInstanceState);
<span > </span>//恢復之前輸入框的內容
<span > </span>if(savedInstanceState != null){
<span > </span>etCon.setText(savedInstanceState.getString("inputCon", ""));
}
}
在Activity中
//系統自動銷毀Activity前保存必要的數據
@Override
public void onSaveInstanceState(Bundle outState){
<span > </span>super.onSaveInstanceState(outState);
String content = etCon.getText().toString();
outState.putString("inputCon", content);
}
//Activity中可在onRestoreInstanceState()方法恢復數據,也可以在onCreate()中恢復,因為Activity一旦被銷毀就會重走一次onCreate()開始的正常生命周期
@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
//恢復之前輸入框的內容
if(savedInstanceState != null){
etCon.setText(savedInstanceState.getString("inputCon", ""));
}
}
@Override
public void onDestroy(){
super.onDestroy();
//Activity被銷毀前可進行最後一次數據的保存,過了這村就沒這店了.
}
這裡有個重要的點,上面的上面所提及的onSaveInstanceState()方法只有在Activity或Fragment確定要被系統自動清除時,才會被調用,如果不是長期後台應用,頁面沒有被系統kill掉,對應的Activity或Fragment也就不會調用onSaveInstanceState()這些方法.
Android -- 跨應用綁定service(AIDL)
之前一章記錄了跨應用啟動service,之前學習過startService於bindService的區別及用法。使用bindService方法,activity需要ser
Android倒計時功能的實現(CountDownTimer)
以前編程的時候,遇到倒計時的功能時,經常自己去寫,但其實Android已經幫封裝好了一個倒計時類CountDownTimer,其實是將後台線程的創建和Handler隊列封
Android版網易雲音樂唱片機唱片磁盤旋轉及唱片機機械臂動畫關鍵代碼實現思路
先看一看我的代碼運行結果。代碼運行起來初始化狀態: 點擊開始按鈕,唱片機的機械臂勻速接近唱片磁盤,同時唱片磁盤也開始勻速順時針旋轉: &n
Android開發 ----------如何真機調試?
一般來說 真機調試 是最快的, 所以建議 大家 直接用真機調試。