`

Bundle savedInstanceState 的意义和用法

 
阅读更多
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 demo

    下面将详细介绍`savedInstanceState`的工作原理、使用方法以及相关的最佳实践。 ### 一、`savedInstanceState` 工作原理 1. **配置更改**:当设备发生配置变化(如屏幕方向改变),Android默认会销毁当前Activity...

    android bundle和activity之间交换数据

    要将数据放入Bundle,你需要创建一个Bundle对象,然后使用`put`方法来添加键值对。例如,你可以使用以下代码将字符串数据放入Bundle: ```java Bundle bundle = new Bundle(); bundle.putString("key", "value"); `...

    Android应用源码之Bundle_Bundle.zip

    2. **Bundle的使用方法** - 存储数据:使用`putXXX()`系列方法,如`putString()`, `putInt()`, `putParcelable()`等,将数据与对应的键关联。 - 获取数据:使用`getXXX()`系列方法,根据键来获取数据,如`...

    安卓Android源码——Bundle.rar

    4. **保存Activity状态**:当Activity被销毁并重新创建(例如设备旋转导致配置改变)时,可以使用onSaveInstanceState(Bundle outState)方法保存当前状态到Bundle,然后在onCreate(Bundle savedInstanceState)或...

    testBundle

    开发者也可以利用这个特性手动保存和恢复状态,通过`onSaveInstanceState(Bundle outState)`和`onCreate(Bundle savedInstanceState)`方法。 五、Bundle的限制 虽然Bundle功能强大,但也有其局限性。例如,它不...

    Fragment与Activity使用Bundle传递数据

    4. **注意生命周期**:在使用Bundle传递数据时,需要注意Activity和Fragment的生命周期。当Activity或Fragment被销毁后,它们保存的Bundle数据可能会丢失。因此,对于跨Activity的数据传递,一般推荐使用Parcelable...

    android activity bundle 通信示例

    3. 在目标Activity中接收数据:在目标Activity的onCreate()方法中,通过getIntent().getExtras()获取传入的Bundle,然后通过对应的键来取出数据。 ```java @Override protected void onCreate(Bundle ...

    Android应用源码之Bundle.zip

    例如,我们可以使用`putString()`、`putInt()`、`putParcelable()`等方法将数据存入`Bundle`。下面是一个简单的例子: ```java Bundle bundle = new Bundle(); bundle.putString("key_string", "Hello, Bundle!"); ...

    测试Activity状态保存和恢复

    通过合理使用`onSaveInstanceState()`、`onCreate(Bundle savedInstanceState)`和`onRestoreInstanceState(Bundle savedInstanceState)`,以及充分的测试,开发者可以确保Activity在任何情况下都能正确地保存和恢复...

    Activity、Bundle、请求码与结果码、Intent、广播、服务 (二)

    这篇博文通过源码分析,详细解释了这些组件的工作原理和使用技巧,对于开发者深入理解Android系统及优化应用性能有着重要的指导意义。通过学习和实践,开发者可以构建出更加高效、稳定且用户体验良好的Android应用。

    activity生命周期保存数据

    这个Bundle对象会在Activity重建时通过`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle savedInstanceState)`方法传回,以便恢复之前的状态。 下面详细讲解如何使用`onSaveInstanceState()...

    Fragment的各类用法及具体实现过程代码

    在onSaveInstanceState(Bundle outState)方法中保存数据,在onCreate(Bundle savedInstanceState)和onActivityCreated(Bundle savedInstanceState)中恢复。 **Fragment的常用API** - `setArguments(Bundle args)`:...

    036集-Bundle

    当设备旋转时,Android会默认销毁并重新创建当前Activity,这时可以利用onSaveInstanceState(Bundle outState)和onCreate(Bundle savedInstanceState)方法保存和恢复状态。 6. **Bundle与Intent的生命周期**: ...

    Android-StatedFragment-保存Fragment的状态

    3. 同样,在`onCreate(Bundle savedInstanceState)`或`onActivityCreated(Bundle savedInstanceState)`中,使用`savedInstanceState`恢复状态,如果`savedInstanceState`非空,则调用父类的`super.onViewCreated...

    嵌入式程序开发

    `onCreate(Bundle savedInstanceState)`是每个Activity生命周期中的关键方法,它在Activity首次创建或重新创建时被调用。`savedInstanceState`参数是一个`Bundle`对象,其中包含了Activity在之前保存的状态信息。...

    onSaveInstanceState保存数据demo

    当Activity重建时,系统会在`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle savedInstanceState)`中提供之前保存的Bundle。你可以在这里恢复之前保存的状态: ```java @Override ...

    Android Activity内嵌Fragment,当Activity recreate时Fragment被添加多次,造成界面重叠

    每个Fragment都有`onSaveInstanceState(Bundle outState)`和`onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)`方法,可以用来保存和恢复Fragment的状态。当Activity重建时...

    Activity数据恢复Demo

    在处理数据恢复时,Android提供了`onSaveInstanceState(Bundle outState)`和`onRestoreInstanceState(Bundle savedInstanceState)`这两个方法。当`Activity`即将被暂停或销毁时,系统会调用`onSaveInstanceState()`...

    安卓activity间的数据传递

    本篇文章将深入探讨“安卓activity间的数据传递”这一主题,特别关注使用Bundle对象的方法。 首先,Activity间的通信是Android应用设计的重要部分,这涉及到启动一个新Activity、在Intent中携带数据以及使用Bundle...

    Android应用源码之Bundle1_Bundle.zip

    在这个“Android应用源码之Bundle1_Bundle.zip”压缩包中,我们可以深入理解`Bundle`的使用方法和实现细节。 1. **Bundle的创建与初始化**: - `Bundle`对象可以通过调用`new Bundle()`来创建。在创建后,我们可以...

Global site tag (gtag.js) - Google Analytics