[英]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.