130

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

4

6 回答 6

110

如果您将应用程序的状态保存在包中(通常是非持久的动态数据),如果需要重新创建活动(例如,方向更改)onSaveInstanceState,可以将其传递回,这样您就不会丢失之前的onCreate信息。如果没有提供数据,savedInstanceState则为空。

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

来源

于 2012-05-30T05:27:34.987 回答
18

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

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

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

我们可以从作为参数传递给onCreate方法的 Bundle 中加载保存的实例状态。我们还可以在onRestoreInstanceState方法中加载保存的实例状态。但我会把它留给读者去理解。

于 2012-05-30T05:25:49.177 回答
16

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

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

于 2016-07-30T04:29:36.917 回答
8

Android 中的 onCreate(Bundle savedInstanceState) 函数:

  1. 当 Activity 第一次调用或启动时,onCreate(Bundle savedInstanceState) 方法负责创建 Activity。

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

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

  4. 基本上,当应用程序中出现上述情况时,Bundle 类用于存储活动数据。

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

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

于 2018-01-21T08:21:43.917 回答
4

onCreate(Bundle)在活动首次启动时调用。您可以使用它来执行一次性初始化,例如创建用户界面。onCreate()接受一个参数,该参数要么为空,要么为onSaveInstanceState.

于 2013-12-01T14:54:40.810 回答
0

onCreate(Bundle savedInstanceState) 被调用,并且如果您的 Activity 并且它在上述场景(可视视图)中终止,则 savedInstanceState 将是非空的。然后,您的应用程序可以从 savedInstanceState 中获取(捕获)数据并重新生成您的 Activity

于 2014-03-05T08:32:49.573 回答