[英]Why isn't onRestoreInstanceState called after onStart?
我正在嘗試測試onRestoreInstanceState方法以及何時(確切地)調用它。 所以我遵循了以下步驟:
onCreate -- > onStart --> onResume
被調用。 onPause --> onSaveInstanceState --> onStop
被調用。 onRestart --> onStart --> onResume
被調用。 我的java代碼:
package com.test.demostate.app;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
public class MainActivity extends ActionBarActivity {
private int visiters=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("TAG","onCreate");
}
@Override
protected void onPause() {
super.onPause();
Log.d("TAG","onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d("TAG","onStop");
}
@Override
protected void onStart() {
super.onStart();
Log.d("TAG","onStart");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("TAG","onRestart");
}
@Override
protected void onResume() {
super.onResume();
visiters++;
Log.d("TAG","onResume");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("visiters",visiters);
Log.d("TAG",visiters+" visiters was saved ");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
visiters=savedInstanceState.getInt("visiters");
Log.d("TAG",visiters+" visiters was restored");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("TAG","onDestroy");
}
}
從文檔中: Instead of restoring the state during onCreate() you may choose to implement onRestoreInstanceState(), which the system calls after the onStart() method .
因此調用onRestoreInstanceState
onPause --> onStop --> onDestroy
然后onCreate --> onRestoreInstanceState --> onResume
(例如由於屏幕旋轉) onPause --> onStop --> onRestart --> onStart --> onRestoreInstanceState --> onResume
(由於主頁圖標按下) 但是為什么不在onStart之后調用它?
謝謝
在onStart()
只有在onStart()
onSaveInstanceState()
。
來自文檔:
當從以前保存的狀態重新初始化活動時,在onStart()之后調用此方法,此處在savedInstanceState中給出。 大多數實現只是使用onCreate(Bundle)來恢復它們的狀態,但有時在完成所有初始化之后在此處執行它或者允許子類決定是否使用默認實現。 此方法的默認實現執行先前已被onSaveInstanceState(Bundle)凍結的任何視圖狀態的恢復。
在onStart()和onPostCreate(Bundle)之間調用此方法。
關於onRestoreInstanceState (Bundle savedInstanceState)
的官方文檔說明:
當從以前保存的狀態重新初始化活動時,在onStart()之后調用此方法,此處在savedInstanceState中給出。 大多數實現只是使用onCreate(Bundle)來恢復它們的狀態,但有時在完成所有初始化之后在此處執行它或者允許子類決定是否使用默認實現。 此方法的默認實現執行先前已被onSaveInstanceState(Bundle)凍結的任何視圖狀態的恢復。
在onStart()和onPostCreate(Bundle)之間調用此方法。
當活動重新初始化時?
嘗試更改模擬器的方向:
按Ctrl + F12
看看用戶@GAThrawn的答案
按Home鍵退出應用程序並轉到主屏幕,同時讓應用程序在后台運行。 這有點像在Windows PC上的窗口之間切換。
除非您的手機在內存等資源上運行不足,否則它將開始關閉在后台運行的應用,以便您的手機擁有足夠的資源來應對您現在要做的事情。 游戲通常是手機為了節省資源而“殺死”的第一批應用程序,因為它們通常比其他應用程序使用更多的內存和CPU。 這就是為什么有時你的游戲仍在暫停運行的原因,有時Android會為你關閉它。
所以我不能證明我的第二個論點,因為它決定它是操作系統,至少不知道如何證明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.