Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。可是有一点容易被忽视,就是onCreate方法的参数saveInsanceState。一般的程序开发中,很少用到这个参数。
onCreate方法的完整定义如下:
public void onCreate(Bundle saveInsanceState){
super.onCreate(saveInsanceState);
}
Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的。
从字面上看saveInsanceState,是保存实例状态的。实际上,saveInsanceState也就是保存Activity的状态的。那么,saveInsanceState中的状态数据是从何处而来的呢?下面我们介绍Activity的另一个方法saveInsanceState。
onsaveInsanceState方法是用来保存Activity的状态的。当一个Activity在生命周期结束前,会调用该方法保存状态。
如下所示:
public void onSaveInsanceState(Bundle saveInsanceState){
super.onSaveInsanceState(saveInsanceState);
}
在实际应用中,当一个Activity结束前,如果需要保存状态,就在onsaveInsanceState中,将状态数据以key-value的形式放入到saveInsanceState中。这样,当一个Activity被创建时,就能从onCreate的参数saveInsanceState中获得状态数据。
状态这个参数在实现应用中有很大的用途,比如:一个游戏在退出前,保存一下当前游戏运行的状态,当下次开启时能接着上次的继续玩下去。再比如:电子书程序,当一本小说被阅读到第199页后退出了(不管是内存不足还是用户自动关闭程序),当下次打开时,读者可能已忘记了上次已阅读到第几页了,但是,读者想接着上次的读下去。如果采用saveInstallState参数,就很容易解决上述问题。
使用例子:
import android.app.Activity;
import android.os.Bundle;
import android.util.Log
public class AndroidTest extends Activity {
private static final String TAG = "MyNewLog";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// If an instance of this activity had previously stopped, we can get the original text it started with.
if(null != savedInstanceState)
{//因为Activity的生命周期原因 ,if 语句放着不一定能执行得到 应该结合实际情况
int IntTest = savedInstanceState.getInt("IntTest");
String StrTest = savedInstanceState.getString("StrTest");
}
setContentView(R.layout.main);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save away the original text, so we still have it if the activity needs to be killed while paused.
savedInstanceState.putInt("IntTest", 0);
savedInstanceState.putString("StrTest", "savedInstanceState test");
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
int IntTest = savedInstanceState.getInt("IntTest");
String StrTest = savedInstanceState.getString("StrTest");
}
}
分享到:
相关推荐
下面将详细介绍`savedInstanceState`的工作原理、使用方法以及相关的最佳实践。 ### 一、`savedInstanceState` 工作原理 1. **配置更改**:当设备发生配置变化(如屏幕方向改变),Android默认会销毁当前Activity...
要将数据放入Bundle,你需要创建一个Bundle对象,然后使用`put`方法来添加键值对。例如,你可以使用以下代码将字符串数据放入Bundle: ```java Bundle bundle = new Bundle(); bundle.putString("key", "value"); `...
2. **Bundle的使用方法** - 存储数据:使用`putXXX()`系列方法,如`putString()`, `putInt()`, `putParcelable()`等,将数据与对应的键关联。 - 获取数据:使用`getXXX()`系列方法,根据键来获取数据,如`...
4. **保存Activity状态**:当Activity被销毁并重新创建(例如设备旋转导致配置改变)时,可以使用onSaveInstanceState(Bundle outState)方法保存当前状态到Bundle,然后在onCreate(Bundle savedInstanceState)或...
开发者也可以利用这个特性手动保存和恢复状态,通过`onSaveInstanceState(Bundle outState)`和`onCreate(Bundle savedInstanceState)`方法。 五、Bundle的限制 虽然Bundle功能强大,但也有其局限性。例如,它不...
4. **注意生命周期**:在使用Bundle传递数据时,需要注意Activity和Fragment的生命周期。当Activity或Fragment被销毁后,它们保存的Bundle数据可能会丢失。因此,对于跨Activity的数据传递,一般推荐使用Parcelable...
3. 在目标Activity中接收数据:在目标Activity的onCreate()方法中,通过getIntent().getExtras()获取传入的Bundle,然后通过对应的键来取出数据。 ```java @Override protected void onCreate(Bundle ...
例如,我们可以使用`putString()`、`putInt()`、`putParcelable()`等方法将数据存入`Bundle`。下面是一个简单的例子: ```java Bundle bundle = new Bundle(); bundle.putString("key_string", "Hello, Bundle!"); ...
通过合理使用`onSaveInstanceState()`、`onCreate(Bundle savedInstanceState)`和`onRestoreInstanceState(Bundle savedInstanceState)`,以及充分的测试,开发者可以确保Activity在任何情况下都能正确地保存和恢复...
这篇博文通过源码分析,详细解释了这些组件的工作原理和使用技巧,对于开发者深入理解Android系统及优化应用性能有着重要的指导意义。通过学习和实践,开发者可以构建出更加高效、稳定且用户体验良好的Android应用。
这个Bundle对象会在Activity重建时通过`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle savedInstanceState)`方法传回,以便恢复之前的状态。 下面详细讲解如何使用`onSaveInstanceState()...
在onSaveInstanceState(Bundle outState)方法中保存数据,在onCreate(Bundle savedInstanceState)和onActivityCreated(Bundle savedInstanceState)中恢复。 **Fragment的常用API** - `setArguments(Bundle args)`:...
当设备旋转时,Android会默认销毁并重新创建当前Activity,这时可以利用onSaveInstanceState(Bundle outState)和onCreate(Bundle savedInstanceState)方法保存和恢复状态。 6. **Bundle与Intent的生命周期**: ...
3. 同样,在`onCreate(Bundle savedInstanceState)`或`onActivityCreated(Bundle savedInstanceState)`中,使用`savedInstanceState`恢复状态,如果`savedInstanceState`非空,则调用父类的`super.onViewCreated...
`onCreate(Bundle savedInstanceState)`是每个Activity生命周期中的关键方法,它在Activity首次创建或重新创建时被调用。`savedInstanceState`参数是一个`Bundle`对象,其中包含了Activity在之前保存的状态信息。...
当Activity重建时,系统会在`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle savedInstanceState)`中提供之前保存的Bundle。你可以在这里恢复之前保存的状态: ```java @Override ...
每个Fragment都有`onSaveInstanceState(Bundle outState)`和`onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)`方法,可以用来保存和恢复Fragment的状态。当Activity重建时...
在处理数据恢复时,Android提供了`onSaveInstanceState(Bundle outState)`和`onRestoreInstanceState(Bundle savedInstanceState)`这两个方法。当`Activity`即将被暂停或销毁时,系统会调用`onSaveInstanceState()`...
本篇文章将深入探讨“安卓activity间的数据传递”这一主题,特别关注使用Bundle对象的方法。 首先,Activity间的通信是Android应用设计的重要部分,这涉及到启动一个新Activity、在Intent中携带数据以及使用Bundle...
在这个“Android应用源码之Bundle1_Bundle.zip”压缩包中,我们可以深入理解`Bundle`的使用方法和实现细节。 1. **Bundle的创建与初始化**: - `Bundle`对象可以通过调用`new Bundle()`来创建。在创建后,我们可以...