任何人都可以帮助我了解Bundle savedInstanceState
onCreate(Bundle savedInstanceState)
我在Android中的新手。我尝试从developer.android.com了解它。但我无法理解。任何人都可以简化吗?
答案 0 :(得分:100)
如果您将应用程序的状态保存在一个包中(通常是onSaveInstanceState
中的非持久性动态数据),如果需要重新创建活动,则可以将其传递回onCreate
(例如,方向改变),以便您不会丢失此先前信息。如果未提供任何数据,则savedInstanceState
为空。
...你 应该使用onPause()方法来编写任何持久数据(例如 用户编辑)到存储。另外,该方法 在放置活动之前调用onSaveInstanceState(Bundle) 这样的背景状态,可以让你省去任何动态 实例状态在您的活动中进入给定的Bundle,稍后 如果需要重新创建活动,则在onCreate(Bundle)中收到。 有关如何使用的更多信息,请参阅“进程生命周期”部分 流程的生命周期与其托管的活动相关联。注意 将持久数据保存在onPause()而不是 onSaveInstanceState(Bundle)因为后者不属于 生命周期回调,因此不会在每种情况下调用 在其文档中描述。
答案 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)
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)
onCreate(Bundle savedInstanceState)并且savedInstanceState将为非null。然后你的应用可以抓住 (catch)来自savedInstanceState的数据并重新生成您的Activity