1 问题描述

​ 在旋转屏幕时,记录旋转屏幕次数的计数器(count)一直为 0,不能实现累加效果。主要因为在旋转屏幕时,会销毁原来的变量,重新构建界面。

2 解决思路

​ 在 Activity 销毁(onDestroy)之前,将 count 保存到 Bundle中,再在 Activity 构建(onCreate)的时候从 Bundle 中取出 count 值。Google 工程师已想到这点,为我们提供了 onSaveInstanceState(@NonNull Bundle outState) 方法(保存数据)和 onRestoreInstanceState(@NonNull Bundle savedInstanceState) 方法(恢复数据),我们只需要重写这2个方法即可。

3 原理

​ onSaveInstanceState() 方法和 onRestoreInstanceState() 方法不是 Activity 生命周期方法,不一定会被触发。

(1)onSaveInstanceState() 方法调用时机

  • 用户按下HOME键
  • 用户按MENU键,选择运行其他程序
  • 按电源按键锁屏
  • 从该 activity 启动一个新的 activity
  • 屏幕方向切换

​ 当用户主动销毁该 activity 时,如当用户按 BACK 键的时候,不会执行 onSaveInstanceState() 方法。如果 onSaveInstanceState() 方法被调用,调用将发生在 onPause() 或 onStop() 方法之间。

(2)onRestoreInstanceState() 方法调用时机

​ onRestoreInstanceState() 方法只有在当前activity被销毁,并需要重新恢复的时候才被调用,在 onStart() 方法和 onPostCreate(Bundle) 方法之间调用。

4 解决方案

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
outState.putInt("count",count);
super.onSaveInstanceState(outState);
} @Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
count = savedInstanceState.getInt("count");
}

​ 声明:本文转自【Android】屏幕旋转时数据丢失问题解决方案

【Android】屏幕旋转时数据丢失问题解决方案的更多相关文章

  1. 屏幕旋转时调用PopupWindow update方法更新位置失效的问题及解决方案

       接到一个博友的反馈,在屏幕旋转时调用PopupWindow的update方法失效.使用场景如下:在一个Activity中监听屏幕旋转事件,在Activity主布局文件中有个按钮点击弹出一个Pop ...

  2. Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

    的最佳方案 标签: Android屏幕旋转AsyncTaskProgressDialog 2014-07-19 09:25 39227人阅读 评论(46) 收藏 举报 分类: [android 进阶之 ...

  3. 【Android】[转] Android屏幕旋转使用OrientationEventListener的监听

    说明 遇到一个奇葩的问题,我在使用onConfigChanged拦截屏幕的横竖屏旋转时,发现直接进行180度的横屏/竖屏转换居然没有反应!查找原因发现仅对landscape或者portrait状态有用 ...

  4. android 屏幕旋转

    转自:http://blog.csdn.net/oyzhizhong/article/details/8131799 屏是LANDSCAPE的,要让它默认显示为PORTRAIT. 1.kernel里要 ...

  5. Android屏幕旋转

    一个手机最基本的旋转方向有上面4种,而在Android开发中,涉及到屏幕旋转的地方很多,而且各个函数给出的角度值都不一样,比如 Activity的getRotate,Camera的setDisplay ...

  6. 安卓屏幕旋转时,禁止Activity重新加载

    安卓设备旋转屏幕时,Activity默认会重新加载,如果是要读取大量数据的场景,那等待的时间比较长,这一点不可接受,所以要想办法禁止Activity自动重新加载. 方法如下在AndroidManife ...

  7. Android屏幕旋转总结

    转自:http://www.myexception.cn/operating-system/1452058.html 1. ProjectConifg.mk中定义宏MTK_LCM_PHYSICAL_R ...

  8. 屏幕旋转时 Activity 的生命周期 —— 测试与结论

    关于 Android 手机横竖屏切换时 Activity 的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时 Activity 会重启一次,而在横屏切换竖屏时 Activity 会重 ...

  9. android 屏幕旋转 不重新加载oncreate

    当手机设定了使用横屏或者竖屏的时候,还想要使用重力感应,可以设置activity属性 android:screenOrientation="sensor" 但是每次翻转屏幕,都会重 ...

  10. 09.redis 哨兵主备切换时数据丢失的解决方案

    一.两种数据丢失的情况 1. 异步复制导致的数据丢失   因为master->slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机了,此时这些部分数据就丢失了 2 ...

随机推荐

  1. 【rt-thread】SConscript文件添加格式必须是4空格开头

    SConscript文件添加格式必须是4空格开头,TAB或其他数量的空格均错误

  2. Redis-键

  3. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.13)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  4. [转帖]是的你没看错,HTTP3来了

    https://www.jianshu.com/p/288ce6a8ab88 简介 很多小伙伴可能还沉浸在HTTP1.1的世界无法自拔,但是时代的洪流已经带领我们来到了HTTP3的世界了.是的,你在桥 ...

  5. [转帖]Linux kernel内存管理之overcommit相关参数

    前言 了解 linux kernel内存管理,首先可以从用户空间的角度来看kernel的内存管理,执行ls /proc/sys/vm的命令,就可以看到vm运行的所有参数,其中就包含了跟overcomm ...

  6. [转帖]Redis 使用指南:深度解析 info 命令

    https://www.cnblogs.com/hwpaas/p/9442410.html Redis 是一个使用  ANSI C 编写的开源.基于内存.可选持久性的键值对存储数据库,被广泛应用于大型 ...

  7. 【转】Java类加载器:类加载原理解析

    [转]Java类加载器:类加载原理解析 https://www.jianshu.com/p/1f704ad4196e 摘要: 每个开发人员对java.lang.ClassNotFoundExcetpi ...

  8. 手工创建一个带sticky模块的nginx镜像 并且实现容器化负载均衡的方法

    最近想进行容器化运行的nginx反向代理负载均衡服务. 找了一下 dockerhub上面的 nginx 发现里面不包含 sticky模块. 会报错为: nginx: [emerg] unknown d ...

  9. 物联网浏览器(IoTBrowser)-电子秤模块及二次驱动开发

    本章介绍电子秤模块的示例功能以及二次开发称重驱动的代码,二次开发以顶尖OS2型号驱动为示例,实现方式与物联网浏览器(IoTBrowser)-顶尖OS2电子秤协议实现类似,不同的是电子秤只需要采集重量不 ...

  10. 如何在 macOS Sonoma 虚拟机中安装 VMware Tools

    vmware-tools VMware Tools 简介 VMware Tools 中包含一系列服务和模块,可在 VMware 产品中实现多种功能,从而使用户能够更好地管理客户机操作系统,以及与客户机 ...