onCreate中Bundle saveInstanceState的作用

原创 2015年11月19日 10:20:41
Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。可是有一点容易被忽视,就是onCreate方法的参数savedInstanceState。因为在一般的程序开发中,很少用到这个参数。
onCreate方法的完整定义如下:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
    从上面的代码可以看出,onCreate方法的参数是一个Bundle类型的参数。Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的。
    从字面上看savedInstanceState,是保存实例状态的。实际上,savedInstanceState也就是保存Activity的状态的。那么,savedInstanceState中的状态数据是从何处而来的呢?下面我们介绍Activity的另一个方法saveInstanceState。
    onsaveInstanceState方法是用来保存Activity的状态的。当一个Activity在生命周期结束前,会调用该方法保存状态。这个方法有一个参数名称与onCreate方法参数名称相同。如下所示:
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInsanceState);
}
    在实际应用中,当一个Activity结束前,如果需要保存状态,就在onsaveInstanceState中,将状态数据以key-value的形式放入到savedInstanceState中。这样,当一个Activity被创建时,就能从onCreate的参数savedInsanceState中获得状态数据。
    状态这个参数在实现应用中有很大的用途,比如:一个游戏在退出前,保存一下当前游戏运行的状态,当下次开启时能接着上次的继续玩下去。再比如:电子书程序,当一本小说被阅读到第199页后退出了(不管是内存不足还是用户自动关闭程序),当下次打开时,读者可能已忘记了上次已阅读到第几页了,但是,读者想接着上次的读下去。如果采用saveInstallState参数,就很容易解决上述问题。
简单的事例api中snake游戏 在SnakeView类中
private int[] coordArrayListToArray(ArrayListcvec) {
        int count = cvec.size();
        int[] rawArray = new int[count * 2];
        for (int index = 0; index < count; index++) {
            Coordinate c = cvec.get(index);
            rawArray[2 * index] = c.x;
            rawArray[2 * index + 1] = c.y;
        }
        return rawArray;
    }
    
    public Bundle saveState() {
        Bundle map = new Bundle();
        map.putIntArray("mAppleList", coordArrayListToArray(mAppleList));
        map.putInt("mDirection", Integer.valueOf(mDirection));
        map.putInt("mNextDirection", Integer.valueOf(mNextDirection));
        map.putLong("mMoveDelay", Long.valueOf(mMoveDelay));
        map.putLong("mScore", Long.valueOf(mScore));
        map.putIntArray("mSnakeTrail", coordArrayListToArray(mSnakeTrail));
        return map;
    }
在snakeActivity中实现
   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.snake_layout);
        mSnakeView = (SnakeView) findViewById(R.id.snake);
        mSnakeView.setTextView((TextView) findViewById(R.id.text));
        if (savedInstanceState == null) {
            // We were just launched -- set up a new game
            mSnakeView.setMode(SnakeView.READY);
        } else {
            // We are being restored
            Bundle map = savedInstanceState.getBundle(ICICLE_KEY);
            if (map != null) {
                mSnakeView.restoreState(map);
            } else {
                mSnakeView.setMode(SnakeView.PAUSE);
            }
        }
    }
并重写onSavedInstanceState(),此方法会在activity结束时,调用.
    @Override
    public void onSaveInstanceState(Bundle outState) {
        //Store the game state
        outState.putBundle(ICICLE_KEY, mSnakeView.saveState());
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

onCreate方法中saveInstanceState参数的作用

示例代码: public class MainActivity extends ActionBarActivity { private static final String TAG = "M...
  • luguoqiang_12
  • luguoqiang_12
  • 2015年05月10日 10:36
  • 2177

解析Activity中的onCreate方法

我们在写一个自己的Activity的时候需要注意: 1、都必须extends Activity(或者其子类); 2、必须在方法onCreate中存在一条这样的语句:super.onCreate(也就是...
  • hirohrj123
  • hirohrj123
  • 2013年12月02日 10:16
  • 5412

onCreate()方法中的参数Bundle savedInstanceState 的意义用法

Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。可是有一点容易被忽视,就是onCreate方法的参数saveIn...
  • liubin8095
  • liubin8095
  • 2013年07月15日 09:49
  • 4823

bug修复-android中的onCreate两个参数的方法是什么鬼?

一 bug阐述和解决 今天,在开发中遇到了这样一个问题: 就是没有界面显示。明明有setContentView xml文件在可视化开发环境下也正常显示.,原来是复写onCreate函数时出现了...
  • u014315849
  • u014315849
  • 2016年03月16日 10:50
  • 3016

Android:Activity中onCreate方法的参数及用途

转自:http://blog.csdn.net/ccccdddxxx/article/details/7843377 写过Android程序的都知道Activity中有一个名称叫onCrea...
  • qq_34206198
  • qq_34206198
  • 2016年06月12日 11:45
  • 2513

Android入门- 关于Activity下的onCreate方法的参数详解

在AndroidManifest.xml文件中的元素中有这么两句: intent-filter>      action android:name="android.intent.ac...
  • baidu_24584043
  • baidu_24584043
  • 2016年01月15日 09:34
  • 1070

Bundle作用及使用方法

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBu...
  • liyanq528
  • liyanq528
  • 2015年09月29日 15:53
  • 587

Android中Bundle类的作用

Android中Bundle类的作用 Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值 今天发现自己连Bundle类都没有搞清楚,于是花时间...
  • luman1991
  • luman1991
  • 2016年10月21日 22:07
  • 956

iOS中bundle的意义

什么是bundle? bundle就是一个文件夹,zhun'xu
  • ZTS315019700
  • ZTS315019700
  • 2014年05月06日 12:01
  • 746

MFC的oncreate函数作用

百科: OnCreate是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。     在view类中,Create 是虚函...
  • q357010621
  • q357010621
  • 2015年10月24日 20:11
  • 1022
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:onCreate中Bundle saveInstanceState的作用
举报原因:
原因补充:

(最多只允许输入30个字)