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

http://www.2cto.com/kf/201307/227935.html

onCreate() 方法是在 Activity 创建时被系统调用,是一个 Activity 生命周期的开始。 但是参数 Bundle savedInstanceState 很容易被忽略,由于 DialtactsActivity.java 中有涉及,所以整理一下。

在 DialtactsActivity.java 的 onCreate() 方法中有:

        if (savedInstanceState == null) {
            final PhoneFavoriteFragment phoneFavoriteFragment = new PhoneFavoriteFragment();

            final FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.add(R.id.dialtacts_frame, phoneFavoriteFragment, TAG_FAVORITES_FRAGMENT);
            ft.add(R.id.dialtacts_container, new DialpadFragment(), TAG_DIALPAD_FRAGMENT);
            ft.commit();
        } else {
            mSearchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY);
            mInRegularSearch = savedInstanceState.getBoolean(KEY_IN_REGULAR_SEARCH_UI);
            mInDialpadSearch = savedInstanceState.getBoolean(KEY_IN_DIALPAD_SEARCH_UI);
            mFirstLaunch = savedInstanceState.getBoolean(KEY_FIRST_LAUNCH);
        }
就来详细了解下。
1、Bundle 
Bundle 数据类型与 Map 数据类型相似,是用来保存实例状态的。而实际上 savedInstanceState 也就是用来保存 Activity 的状态的。就看 savedInstanceState 中的数据是怎么来的。 
2、状态保存
当一个 Activity 生命周期结束前,会调用 onSaveInstanceState(Bundle outState) 方法,用来保存 Activity 的状态。
在实际应用中,当一个 Activity 结束前,如果需要保存状态,就在 onSaveInstanceState() 中,将状态数据以 key-value 的形式放入到 onSaveInstanceState() 中。这样,当一个 Activity 被创建时,就能从 onCreate 的参数 savedInstanceState 中获得数据。
状态这个参数在实现应用中有很大的用途,比如:一个游戏在退出前,保存一下当前游戏运行的状态,当下次开启时能接着上次的继续玩下去。再比如:电子书程序,当一本小说被阅读到第199页后退出了(不管是内存不足还是用户自动关闭程序),当下次打开时,读者可能已忘记了上次已阅读到第几页了,但是,读者想接着上次的读下去。如果采用 saveInstallState 参数,就很容易解决上述问题。
还是以 Dialer 的 DialtactsActivity 为例子。

    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString(KEY_SEARCH_QUERY, mSearchQuery);
        outState.putBoolean(KEY_IN_REGULAR_SEARCH_UI, mInRegularSearch);
        outState.putBoolean(KEY_IN_DIALPAD_SEARCH_UI, mInDialpadSearch);
        outState.putBoolean(KEY_FIRST_LAUNCH, mFirstLaunch);
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值