什么是onCreate(Bundle savedInstanceState)

时间:2012-05-30 05:24:46

标签: android bundle oncreate

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

6 个答案:

答案 0 :(得分:100)

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

  

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

source

答案 1 :(得分: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方法中加载已保存的实例状态。但我会留下让读者弄明白的。

答案 2 :(得分:10)

正如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);
 }

进行定位后,“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
    }
}

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

答案 3 :(得分:4)

首次启动活动时会调用

onCreate(Bundle)。您可以使用它来执行一次性初始化,例如创建用户界面。 onCreate()获取一个参数,该参数为null或以前由onSaveInstanceState保存的某些状态信息。

答案 4 :(得分:3)

Android中的

onCreate(Bundle savedInstanceState)函数:

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

2)当活动的方向(即从水平到垂直或垂直到水平)被改变时或当任何操作系统强制终止活动时,然后savedInstanceState即Bundle Class的对象将保存活动的状态。

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

4)基本上Bundle类用于在app中出现上述条件时存储活动数据。

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

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

答案 5 :(得分:0)

如果您的Activity及其在上述场景(可视视图)中终止,则会调用

onCreate(Bundle savedInstanceState)并且savedInstanceState将为非null。然后你的应用可以抓住 (catch)来自savedInstanceState的数据并重新生成您的Activity