我正在尝试测试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之后调用它?
由于
答案 0 :(得分:1)
仅在onStart()
被调用后才onSaveInstanceState()
。
来自文档:
当活动出现时,在onStart()之后调用此方法 从之前保存的状态重新初始化,在此处给出 savedInstanceState。大多数实现都会使用 onCreate(Bundle)恢复他们的状态,但有时候 在完成所有初始化之后,这里可以方便地完成 或者允许子类决定是否使用默认值 实现。此方法的默认实现执行 恢复之前被冻结的任何视图状态 的onSaveInstanceState(束)。
在onStart()和onPostCreate(Bundle)之间调用此方法。
答案 1 :(得分:1)
官方文档说明了onRestoreInstanceState (Bundle savedInstanceState)
:
当活动出现时,在onStart() 之后调用此方法 从之前保存的状态重新初始化 ,在此处给出 savedInstanceState。大多数实现都会使用 onCreate(Bundle)恢复他们的状态,但有时候 在完成所有初始化之后,这里可以方便地完成 或者允许子类决定是否使用默认值 实现。此方法的默认实现执行 恢复之前被冻结的任何视图状态 的onSaveInstanceState(束)。
在onStart()和onPostCreate(Bundle)之间调用此方法。
当活动重新初始化时?
尝试更改模拟器的方向:
控制+ F12
查看用户@GAThrawn的answer
按主页按钮离开您的应用程序并转到主屏幕, 让你的应用程序在后台运行。这有点像 在Windows PC上的窗口之间切换。
除了您的手机资源不足,就像内存一样 将开始关闭在后台运行的应用程序,以便 您的手机有足够的资源用于您现在尝试做的事情。 游戏通常是手机将要杀死的第一批应用程序。保存 资源,因为他们经常使用比其他应用程序更多的内存和CPU。 这就是为什么有时你的游戏仍在暂停运行的原因 Android已经为您关闭了它。
所以我无法证明我的第二个论点,因为它决定它是操作系统,至少不知道如何证明。