Activity Lifecycle
来自Android开发者指南。
协调活动
当一个活动开始另一个活动时,它们都经历了生命周期
活动共享保存到光盘或其他地方的数据,重要的是
要明白第一个活动之前并没有完全停止
第二个是创建的。相反,启动第二个
一个与停止第一个的过程重叠。
生命周期回调的顺序定义得很好,特别是在
这两个活动处于同一进程(app)中,其中一个正在启动
其他的。以下是当活动
开始活动B:
-
活动A
onPause()
方法执行。
-
onCreate()
onStart()
,和
onResume()
-
然后,如果活动A在屏幕上不再可见,则其
onStop()
方法执行。
这种可预测的生命周期回调序列允许您管理
所以你描述的行为是预期的或可预测的。
1.重新启动活动时,如何彻底销毁以前的活动?
2.在使用recreate()时,有没有一种方法可以输出额外的内容?
重新创建
public void recreate ()
使用新实例重新创建此活动。这个结果
在本质上与由于
配置更改——当前实例将经历
生命周期到onDestroy(),然后在它之后创建一个新实例。
因为活动会重新创建所以
onSaveInstanceState
和
onRestoreInstanceState
onSaveInstanceState
并在
onRestoreInstanceState
或
onCreate
.
OnSaveInstance状态
// The key for saving and retrieving isActivityRecreated field.
private static final String KEY_IS_ACTIVITY_RECREATED = "KEY_IS_ACTIVITY_RECREATED";
/** true if this activity is recreated. */
private boolean isActivityRecreated = false;
// Call this method when you want to recreate this activity.
private void recreateActivity() {
isActivityRecreated = true;
recreate();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(KEY_IS_ACTIVITY_RECREATED, isActivityRecreated);
outState.putInt(Constants.VIDEO_ID, videoId);
outState.putInt(Constants.CATEGORY_ID, categoryId);
}
步骤2:检索中的数据
OnRestoreInstance状态
或
创建时的回调函数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
isActivityRecreated = savedInstanceState.getBoolean(KEY_IS_ACTIVITY_RECREATED);
if (isActivityRecreated) {
// This activity has been recreated.
// Reset the flag
isActivityRecreated = false;
// Write your code when this activity recreated.
int videoId = savedInstanceState.getInt(Constants.VIDEO_ID);
int categoryId = savedInstanceState.getInt(Constants.CATEGORY_ID);
...
}
}
}