繁体   English   中英

什么是 onCreate(Bundle savedInstanceState)

[英]What's onCreate(Bundle savedInstanceState)

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

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

...您应该使用 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 平台允许用户保存任何实例状态。 实例状态可以保存在 Bundle 中。 Bundle 作为参数传递给 onSaveInstanceState 方法。

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

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

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

Android 中的 onCreate(Bundle savedInstanceState) 函数:

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

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

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

  4. 基本上 Bundle 类用于在应用程序中发生上述情况时存储活动数据。

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

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

onCreate(Bundle)在活动第一次启动时被调用。 您可以使用它来执行一次性初始化,例如创建用户界面。 onCreate()接受一个参数,该参数为 null 或一些先前由onSaveInstanceState保存的状态信息。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM