什么是onCreate(Bundle savedInstanceState)

use*_*015 116 android bundle oncreate

谁能帮我了解Bundle savedInstanceStateonCreate(Bundle savedInstanceState),我在Android中的新手.我尝试从developer.android.com了解它.但我无法理解.任何人都可以简化吗?

Dhr*_*ola 102

如果您将应用程序的状态保存在一个包中(通常是非持久的动态数据onSaveInstanceState),onCreate如果需要重新创建活动(例如,方向更改),则可以将其传递回,以便您不会丢失此优先级信息.如果未提供数据,savedInstanceState则为null.

...您应该使用onPause()方法将任何持久数据(例如用户编辑)写入存储.此外,在将活动置于这样的背景状态之前调用onSaveInstanceState(Bundle)方法,允许您将活动中的任何动态实例状态保存到给定的Bundle中,以便稍后在onCreate(Bundle)中接收需要重新创建.有关流程生命周期如何与其托管的活动相关联的详细信息,请参阅流程生命周期部分.请注意,将持久数据保存在onPause()而不是onSaveInstanceState(Bundle)中非常重要,因为后者不是生命周期回调的一部分,因此不会在其文档中描述的每种情况下调用.

资源

  • 其他活动是否共享同一个Bundle?如果我开始另一个活动,它是否从第一个活动中通过了Bundle? (2认同)

Dhe*_*ngh 16

onCreate(Bundle savedInstanceState)Bundle当活动第一次开始时你会得到null,当活动方向改变时它会被使用.......

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

Android提供了另一种实现此目的的优雅方式.为此,我们必须覆盖一个名为的方法onSaveInstanceState().Android平台允许用户保存任何实例状态.实例状态可以保存在Bundle中.Bundle作为参数传递给onSaveInstanceState方法.

我们可以将从作为参数传递的Bundle中保存的实例状态加载到onCreate方法中.我们还可以在onRestoreInstanceState方法中加载已保存的实例状态.但我会留下让读者弄明白的.

  • 如果先前调用了`onSavedInstanceState()`,`savedInstanceState`将为非`null`.方向变化只是可能发生这种情况的一个例子. (11认同)

Asa*_*sad 13

正如Dhruv Gairola所回答的那样,您可以使用Bundle savedInstanceState来保存应用程序的状态.我试图给出一个非常简单的例子,像我这样的新学习者可以轻松理解.

假设您有一个带有TextView和Button的简单片段.每次单击该按钮,文本都会更改.现在,更改您的设备/模拟器的方向,并注意您丢失了数据(表示您点击后已更改的数据),并且片段将再次启动.通过使用Bundle savedInstanceState,我们可以摆脱这个.如果你看一下片段的生命周期.Fragment Lifecylce你会得到一个方法"onSaveInstanceState"在片段即将被销毁时被调用.

因此,我们可以保存状态意味着将更改的文本值添加到该包中

 int counter  = 0;
 @Override
 public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("value",counter);
 }
Run Code Online (Sandbox Code Playgroud)

在进行定位后,"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
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您不会在定位后失去价值.始终显示修改后的值.


Abh*_*bhi 5

Android中的onCreate(Bundle savedInstanceState)函数:

1)首次调用或启动Activity时,onCreate(Bundle savedInstanceState)方法负责创建该活动。

2)当活动的方向(即从水平到垂直或垂直到水平)发生改变时,或者当活动被任何操作系统强行终止时,那么saveInstanceState即Bundle类的对象将保存活动的状态。

3)方向更改后,onCreate(Bundle savedInstanceState)将调用并重新创建活动,并从saveInstanceState加载所有数据。

4)当应用程序中发生以上情况时,基本捆绑包类用于存储活动数据。

5)应用程式不需要onCreate()。但是在应用程序中使用它的原因是因为该方法是放置初始化代码的最佳位置。

6)您也可以将初始化代码放在onStart()或onResume()中,当您的应用程序首次加载时,其工作方式与onCreate()中的相同。