每当屏幕旋转时,每次在 Activity 上调用 onCreate 方法。是再次调用 onCreate 还是重新创建整个活动?
2 回答
它不仅仅是 onCreate()。当屏幕旋转时,Activity 会暂停、停止和重新启动。有关更多信息,请参阅此问题: 活动生命周期 - onCreate 在每次重新定向时调用
如果问题是“为什么会发生这种情况?” 答案与 Android 活动和窗口中的功能有关。更具体地说,当方向改变时,android 目前没有办法移动、调整大小和重新布局每个视图。为了使处理这种情况成为可能,实现了仅拆除活动并将其以不同方向恢复的更简单的实现。
当方向改变时,onDistroy 方法将调用,这表明 Activity 已关闭,并再次创建具有新高度和宽度的新 Activity。
当方向改变时,Activity 类中的所有对象都将销毁,当 Activity 重新启动时,它们将再次创建,如果有大量数据,则需要更多时间再次加载所有数据.. 所以最好将所有数据分开并存储Non-Activity 类中的数据并通过为 NonActivity 类创建对象在 Activity 类中使用。
当方向改变时 onSaveInstanceState 方法也被调用并且
通过使用 onSaveInstanceState 数据将在活动销毁和重新创建时设置或存储一些值
protected void onSaveInstanceState(Bundle icicle) {
super.onSaveInstanceState(icicle);
icicle.putLong("param", value);
}
当活动重新启动 on create 方法调用时,这一次 Bundle 返回您在 onSaveInstanceState 中保存的值
public void onCreate(Bundle icicle) {
if (icicle != null){
value = icicle.getLong("param");
}
}