Answers:
如果您将应用程序的状态保存在捆绑包中(通常onSaveInstanceState
为,onCreate
则为非持久性动态数据),则可以将其回传到是否需要重新创建活动(例如,方向更改)的情况下,这样您就不会丢失之前的状态信息。如果未提供任何数据,savedInstanceState
则为null。
...您应该使用onPause()方法将任何持久性数据(例如用户编辑)写入存储。另外,在将活动置于这样的背景状态之前,将调用onSaveInstanceState(Bundle)方法,从而使您可以将活动中的任何动态实例状态保存到给定的Bundle中,如果活动被以后在onCreate(Bundle)中接收需要重新创建。有关流程的生命周期如何与其托管的活动联系在一起的更多信息,请参见流程生命周期部分。请注意,将持久性数据保存在onPause()中而不是onSaveInstanceState(Bundle)中非常重要,因为后者不是生命周期回调的一部分,因此不会在文档中描述的每种情况下都调用它。
onCreate(Bundle savedInstanceState)
Bundle
首次启动活动获取时,您将获得null;当活动方向更改时,它将被使用.......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android提供了另一种优雅的方法来实现这一目标。为此,我们必须重写名为的方法onSaveInstanceState()
。Android平台允许用户保存任何实例状态。实例状态可以保存在捆绑包中。捆绑包作为参数传递给onSaveInstanceState方法。
我们可以从作为参数传递给onCreate
方法的Bundle中加载保存的实例状态。我们也可以在onRestoreInstanceState
方法中加载保存的实例状态。但我会留给读者去弄清楚。
savedInstanceState
null
如果onSavedInstanceState()
以前曾调用过,则将为非。方向变化只是其中一种可能的例子。
Bundle
参数onCreate(Bundle)
才会为非。这会在方向更改期间发生...,并且在活动被操作系统终止后又恢复活动,以及在设备上触发您感兴趣的任何其他配置更改时也会发生。null
Activity
onSaveInstanceState
正如Dhruv Gairola回答的那样,您可以使用Bundle savedInstanceState来保存应用程序的状态。我试图举一个非常简单的例子,让像我这样的新学习者可以轻松理解。
假设您有一个带有TextView和Button的简单片段。每次单击按钮,文本都会更改。现在,更改设备/仿真器的方向,并注意丢失了数据(单击后即表示更改后的数据),并且片段再次作为第一次启动。通过使用Bundle savedInstanceState,我们可以摆脱它。如果您查看该片段的生命周期。在片段生命周期中,您将获得要在片段将被销毁时调用的方法“ onSaveInstanceState”。
因此,我们可以像这样将状态值更改后的文本值保存到该包中
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
确定方向后,将调用“ onCreate”方法吗?所以我们可以这样做
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
现在,入职培训将不会失去您的价值。修改后的值将始终显示。
Android中的onCreate(Bundle savedInstanceState)函数:
1)首次调用或启动Activity时,onCreate(Bundle savedInstanceState)方法负责创建该活动。
2)当活动的方向(即从水平到垂直或从垂直到水平)改变时,或者当活动被任何操作系统强行终止时,那么saveInstanceState即Bundle类的对象将保存活动的状态。
3)更改方向后,onCreate(Bundle savedInstanceState)将调用并重新创建活动,并从saveInstanceState加载所有数据。
4)当应用程序中发生上述情况时,基本Bundle类用于存储活动数据。
5)应用程式不需要onCreate()。但是在应用程序中使用它的原因是因为该方法是放置初始化代码的最佳位置。
6)您也可以将初始化代码放在onStart()或onResume()中,当您的应用程序首次加载时,其工作方式与onCreate()中的相同。