我有一个活动,当我按下主页按钮时,我具有下一个活动生命周期:
D/States: Login: onPause()
D/States: Login: onStop()
D/States: onSaveInstanceState
D/States: Login: onDestroy()
再次输入我的申请时,我有:
D/States: Login: onStart()
D/States: Login: onResume()
D/States: Login: onPause()
D/States: Login: onResume()
但是未调用onRestoreInstanceState()
方法并且未保存活动状态。
Overrides:
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "Login: onStart()");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "Login: onResume()");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "Login: onPause()");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "Login: onStop()");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "Login: onDestroy()");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("login", mEmailView.getText().toString());
outState.putString("password", mPasswordView.getText().toString());
Log.d(TAG, "onSaveInstanceState");
// super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mEmailView.setText(savedInstanceState.getString("login"));
mPasswordView.setText(savedInstanceState.getString("password"));
Log.d(TAG, "onRestoreInstanceState");
}
据我所知,应该在onRestoreInstanceState()
或onResume()
中调用onStart()
方法。
[我在Google某处搜索configChanges
时搜索了我的问题的答案。我的清单中没有android:configChanges="keyboardHidden|orientation"
或其他一些android:configChanges
。
但是为什么我的活动中没有调用它?解决。
摘自官方文档:
当活动进行时,此方法在onStart()之后调用从先前保存的状态重新初始化,在此给出savedInstanceState。大多数实现只会使用onCreate(Bundle)恢复其状态,但是有时完成所有初始化后,在此处方便地进行操作或允许子类决定是否使用默认值实施。此方法的默认实现会执行恢复以前被冻结的任何视图状态onSaveInstanceState(Bundle)
方向更改后或由于内存限制而被操作系统杀死后重新创建的活动,都将对其进行重新初始化。
在您的情况下,通过按下主屏幕按钮,活动将进入停止状态,除非您的电话运行的内存等资源不足,然后被操作系统杀死,在这种情况下将调用onRestoreInstanceState()
当您按下主页按钮时,您的活动不会被破坏或重新创建。当您从最近的应用程序中恢复活动时,该活动将开始,并且不会重新创建该活动,除非该活动被操作系统杀死以回收内存不足的内存。表现正常