【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 ...
随机推荐
- C++中不支持strdup(),使用_strdup()
1.问题 C4996 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conf ...
- JS - console多个值
Promise.all([p1, p2]).then( (res) => { let [p1, p2] = res; console.l ...
- Go-包-package-modules-import
- Numa以及其他内存参数等对Oracle的影响
Numa以及其他内存参数等对Oracle的影响 背景知识: Numa的理解 Numa 分一致性内存访问结构 主要是对应UMA 一致性内存访问而言的. 在最初一个服务器只有一个CPU的场景下, 都是UM ...
- [转帖]云平台部署CNA、VRM手动安装方法
云平台部署CNA.VRM手动安装方法 分享人:郭道川 00443725 日期:2018.11.06 Ⅰ. 项目介绍 该项目主要为XX煤矿智能煤炭项目云平台部署交付,该项目所采用的服务器为RH2 ...
- [转帖]安全技术和iptables防火墙
目录 安全技术 Netfilter 防火墙工具介绍 iptables firewalld nftables iptables的组成概述 netfilter与iptables关系 iptables的四表 ...
- [转帖]【dperf系列-5】使用dperf进行性能测试(初级)
https://zhuanlan.zhihu.com/p/451341132 dperf是一款高性能的开源网络压力测试仪,是Linux基金会旗下的DPDK官方生态项目.本文介绍如利用dperf在两台物 ...
- [转帖]Unixbench服务器综合性能测试方法及工具下载
UnixBench是一款开源的测试 unix 系统基本性能的工具,是比较通用的测试VPS性能的工具. UnixBench会执行一系列的测试,包括2D和3D图形系统的性能衡量,测试的结果不仅仅只是CPU ...
- Chrome 历史版本下载点
https://www.chromedownloads.net/chrome64win-stable/
- 【AIGC】只要10秒,AI生成IP海报,解放双手!!!
看完这篇文章,你将学会以下价值连城的内容 1.云端部署(配置不行的小伙伴看)+ 云端模型放置位置 2.本地部署(配置达标的小伙伴看) 3.运用SD训练IP的流程和技巧(LoRA篇) 4.运用SD稳定生 ...