• Android-Activity临时数据的保存


    Activity临时数据的保存是非常重要的,例如:一款小说APP应用,读者使用这款APP看到了223页,用户也没有去记看了多少页;

    突然去接了个电话,或者开启的应用程序太多了,可能会导致这款APP应用程序的Activity被系统杀死回收了,当用户打完电话 再次打开这款APP的时候,又从第一页开始了,这样体验非常不好,所以需要去保存Activity的临时数据


    在Activity中 onSaveInstanceState(Bundle outState)方法用Bundle保存数据,可以在onCreate(Bundle savedInstanceState)方法用Bundle恢复数据,注意要判断Bundle是否为空

    package liudeli.activity.temp_data;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    import liudeli.activity.R;
    
    public class TempDataActivity extends Activity {
    
        private final String TAG = TempDataActivity.class.getSimpleName();
    
        /**
         * 定义页数变量
         */
        private int page;
    
        /**
         * 此方法不仅仅可以初始化数据
         * 还可以恢复保存的临时数据
         * @param savedInstanceState onSaveInstanceState方法 保存的临时数据就存放在Bundle里面
         */
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_temp_data);
    
            // 为什么要null判断,因为没有保存临时数据的时候,Bundle是null
            // 所以第一次初始化一定是null
            if (null != savedInstanceState) {
                page = savedInstanceState.getInt("page");
                Log.d(TAG, "onCreate 上次看到了" + page + "页");
            }
    
            Log.d(TAG, "onCreate");
        }
    
        /**
         * 例如:当系统内存不足的时候,切换其他游戏应用程序 在玩游戏,有可能当前的Activity会被回收杀死
         *      一旦出现回收杀死Activity就会调用此方法,然后在此方法保存临时数据
         * @param outState
         */
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            // 用户看到223页
            page = 223;
            outState.putInt("page", page);
        }
    
        /**
         * 恢复保存的临时数据
         * @param savedInstanceState onSaveInstanceState方法 保存的临时数据就存放在Bundle里面
         */
        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);
            // 这个方法不需要判断savedInstanceState null,因为不可能为null,只有保存过数据,再次打开Activity才会调用此方法
            page = savedInstanceState.getInt("page");
            Log.d(TAG, "onRestoreInstanceState 上次看到了" + page + "页");
        }
    
    
    
        /******* 下面是一系列生命周期方法,用来观察,Activity被系统杀死,又重写启动的Log打印 ******/
    
        @Override
        protected void onStart() {
            super.onStart();
            Log.d(TAG, "onStart");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            Log.d(TAG, "onResume");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            Log.d(TAG, "onPause");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            Log.d(TAG, "onStop");
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.d(TAG, "onDestroy");
        }
    }

    如何才能让这个Activity被系统杀死回收呢?

    答:如果要测试的话,可以用模拟器 横竖屏切换一下,Activity就被杀死,然后自动重新启动Activity

    以上图 横竖屏切换后,系统会默认会把Activity杀死回收,所以执行以下方法:

      12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onPause
      12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onStop
      12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onDestroy

      系统会自动启动这个Activity,请看下面的Log
      12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate 上次看到了223页
      12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate
      12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onStart
      12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onRestoreInstanceState 上次看到了223页
      12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onResume

  • 相关阅读:
    js方法随机抽取n个随机数
    js里面函数的内部属性
    js中字符串支持正则表达式的方法
    扑克牌交换经典案例
    js里面进行位运算时候的注意事项
    js里面声明变量时候的注意事项
    三种方式加入媒体样式
    如何让多文本内容只显示一行,其余用省略号来显示
    background-clip和background-origin
    闲谈--心态 (zhuan)
  • 原文地址:https://www.cnblogs.com/android-deli/p/10111080.html
Copyright © 2020-2023  润新知