• onSaveInstanceState和onRestoreInstanceState


    activity在即将被销毁的时候(横竖屏切换,出bug时),会调用 onSaveInstanceState进行保存一些数据,再重新onstart之后会调用onRestoreInstanceState方法恢复数据。

      //disdroy前保存数据
        @Override
        public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
            super.onSaveInstanceState(outState, outPersistentState);
            Log.d("***", "程序异常 保存数据");
            outState.putString("name", "抗压吧务团队5");
    
        }
    
        //恢复数据
        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);
            System.out.println(savedInstanceState.isEmpty());
            Log.d("***", "恢复数据:" + savedInstanceState.get("name"));
        }

    oncreat方法也会有可能恢复数据(取决于之前有没有保存数据),所以要在数据恢复之前判断一下 Bundle 是否为null 

    官方推荐使用 onRestoreInstanceState onRestoreInstanceState 一旦执行 Bundle 中必然有值。

    之前照着书上打始终不执行  onSaveInstanceState ,原因是安卓5.0以后activity新加了一个属性: persistableMode,这样activity就有了持久化的能力

    Manifest里在activity中加入:

      <activity
                android:name=".MainActivity"
                android:persistableMode="persistAcrossReboots">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
  • 相关阅读:
    STL中set求交集、并集、差集的方法
    Vijos 1308 埃及分数(迭代加深搜索)
    POJ 1161 Walls(Floyd , 建图)
    UVa 1601 万圣节后的早晨
    dp之完全背包
    dp之取数字问题
    dp之最长公共子序列
    枚举排列
    poj 3187 暴力枚举
    poj 2431 优先队列,贪心
  • 原文地址:https://www.cnblogs.com/6324/p/6294827.html
Copyright © 2020-2023  润新知