【Android】屏幕旋转时数据丢失问题解决方案
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】屏幕旋转时数据丢失问题解决方案的更多相关文章
- 屏幕旋转时调用PopupWindow update方法更新位置失效的问题及解决方案
接到一个博友的反馈,在屏幕旋转时调用PopupWindow的update方法失效.使用场景如下:在一个Activity中监听屏幕旋转事件,在Activity主布局文件中有个按钮点击弹出一个Pop ...
- Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
的最佳方案 标签: Android屏幕旋转AsyncTaskProgressDialog 2014-07-19 09:25 39227人阅读 评论(46) 收藏 举报 分类: [android 进阶之 ...
- 【Android】[转] Android屏幕旋转使用OrientationEventListener的监听
说明 遇到一个奇葩的问题,我在使用onConfigChanged拦截屏幕的横竖屏旋转时,发现直接进行180度的横屏/竖屏转换居然没有反应!查找原因发现仅对landscape或者portrait状态有用 ...
- android 屏幕旋转
转自:http://blog.csdn.net/oyzhizhong/article/details/8131799 屏是LANDSCAPE的,要让它默认显示为PORTRAIT. 1.kernel里要 ...
- Android屏幕旋转
一个手机最基本的旋转方向有上面4种,而在Android开发中,涉及到屏幕旋转的地方很多,而且各个函数给出的角度值都不一样,比如 Activity的getRotate,Camera的setDisplay ...
- 安卓屏幕旋转时,禁止Activity重新加载
安卓设备旋转屏幕时,Activity默认会重新加载,如果是要读取大量数据的场景,那等待的时间比较长,这一点不可接受,所以要想办法禁止Activity自动重新加载. 方法如下在AndroidManife ...
- Android屏幕旋转总结
转自:http://www.myexception.cn/operating-system/1452058.html 1. ProjectConifg.mk中定义宏MTK_LCM_PHYSICAL_R ...
- 屏幕旋转时 Activity 的生命周期 —— 测试与结论
关于 Android 手机横竖屏切换时 Activity 的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时 Activity 会重启一次,而在横屏切换竖屏时 Activity 会重 ...
- android 屏幕旋转 不重新加载oncreate
当手机设定了使用横屏或者竖屏的时候,还想要使用重力感应,可以设置activity属性 android:screenOrientation="sensor" 但是每次翻转屏幕,都会重 ...
- 09.redis 哨兵主备切换时数据丢失的解决方案
一.两种数据丢失的情况 1. 异步复制导致的数据丢失 因为master->slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机了,此时这些部分数据就丢失了 2 ...
随机推荐
- window-子系统-ubuntu
window-子系统-ubuntu 1. 背景 提供类Linux开发环境(命令行.文件系统.进程管理.网路) 2. 安装 A. wsl 安装 下载链接: https://wslstorestorage ...
- 【面试题精讲】JavaOptional用法
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 文章更新计划 系列文章地址 Java 8 引入了 Option ...
- 银河麒麟上面 ntopng的安装与使用
银河麒麟上面 ntopng的安装与使用 背景 一直想用Grafana监控网络流量 但是断断续续尝试了一周的时间都没有搞定. 发现这一块已经进入了瓶颈. 比较无奈的情况下回到了原来的iftop/iptr ...
- [转帖]linux将大目录等分切割成多个小目录
https://www.jianshu.com/p/6f9e6743a1dc 需求:有一个目录存放了数十万个文件,现在需要将这个目录上传,如果整个目录上传,中间因为某些故障断开连接了,可能又要从头开始 ...
- Mysql8.0.32 union all创建视图无法使用中文模糊查询的坑
Mysql8.0.32 union all创建视图无法使用中文模糊查询的坑 摘要 本周研发同事反馈现场有一个问题. 客户使用mysql的数据库(Windows平台) 然后在多表union all 创建 ...
- [转帖]Linux系统下cpio命令详解
简介 cpio主要是解压或者将文件压缩到指定文件中即copy-in和copy-out模式. 参数说明 参数 参数说明 -i copy-in模式,解压文件 -o copy-out模式,即压缩文件 -d ...
- [翻译]-hugePage的简要说明--部分内容
hugePage的简要说明 本篇文档的主旨给linux内核支持的大页内存做一个简要的概述. 大页内存的实现是建立在大多数现代架构所都支持的多级页大小的特性之上的. 举例: x86架构下大部署CPU 的 ...
- SpringBoot 连接Oracle 12c 以上版本PDB的解决思路
1. 最近公司产品改用springboot开发, 要支持企业级大型数据库Oracle ,并且版本要求比较高,需要使用Oracle12c以上. 又因为Oracle 12c 以上有了一个PDB的可插拔数据 ...
- 买彩票能中大奖?用Java盘点常见的概率悖论 | 京东云技术团队
引言 <双色球头奖概率与被雷劈中的概率哪个高?> <3人轮流射击,枪法最差的反而更容易活下来?> 让我们用Java来探索ta们! 悖论1:著名的三门问题 规则描述:你正在参加一 ...
- 官宣!Python 开发者大会(PyCon US)提供在线订阅啦!
今年一开年,我们就遇到了一个天大的"黑天鹅"事件,如今它已蔓延成为了一个全球性事件,而且似乎还要持续一段挺长的时间. 各行各业的人们都受到了牵连,各种计划和安排也要被迫作出调整.今 ...