Android 系列 2.4用户旋转设备时保留数据
来源:互联网 发布:个人所得税申报的软件 编辑:程序博客网 时间:2024/05/02 02:25
2.4用户旋转设备时保留数据
问题
当用户旋转设备时,Android通常会销毁并重新创建当前活动。您希望在此周期中保留一些数据,但活动中的所有字段都会丢失。
解
有几种方法。如果所有数据都包含原始类型,包含String s或Serializable,则可以将其保存在传递的Bundle中的onSaveInstanceState()中。
另一个解决方案允许您返回一个任意对象。您只需要覆盖您的活动中的onRetainNonConfigurationInstance()以保存一些值;在onCreate()的结尾处调用getLastNonConfigurationInstance()以查看是否存在先前保存的值,如果是,则相应地分配字段。
讨论
使用onSaveInstanceState()
使用onRetainNonConfigurationInstance()
getLastNonConfigurationInstance()方法的返回类型是Object,所以你可以返回任何你想要的值。您可能想创建一个Map或写一个内部类来存储值,但是通常只需传递对当前活动的引用就更容易了,例如,使用:
/ **返回任意单个令牌对象,以保持整个企业的销毁和重新创建。
* /
@覆盖
public Object onRetainNonConfigurationInstance(){
返回这个;
}}
当Android破坏您的主要活动时,将调用上述方法。假设您想保留对正在由正在运行的服务更新的另一个对象的引用,该对象由活动中的字段引用。还可能有一个布尔值来指示服务是否处于活动状态。在上面的代码中,我们返回一个对活动的引用,从中可以访问它的所有字段(甚至是私有字段,因为传出和传入的Activity对象是相同的类)。在我的地理跟踪应用程序JPSTrack,例如,我有一个FileSaver类接受来自位置服务的数据;我希望它不断获取位置,并保存到磁盘,尽管旋转,而不是每次屏幕旋转重新启动它。如果您的设备固定在汽车仪表盘上(我们希望),则旋转是不太可能的,但很可能是在乘客或行人在地理跟踪时拍摄照片或输入笔记。
Android创建新实例后,它调用onCreate()以通知新实例已创建它。在onCreate()中,通常会执行构造函数操作,例如初始化字段和分配事件侦听器。那么,你仍然需要做那些,所以留下他们。然而,接近onCreate()的结尾,你将添加一些代码来获取旧的实例,如果有的话,并从中获取一些重要的字段。代码应该像例2-3。
实施例2-3。 onCreate方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
saving = false;
paused = false;
// lots of other initializations...
// Now see if we just got interrupted by e.g., rotation
Main old = (Main) getLastNonConfigurationInstance();
if (old != null) {
saving = old.saving;
paused = old.paused;
// this is the most important line: keep saving to same file!
fileSaver = old.fileSaver;
if (saving) {
fileNameLabel.setText(fileSaver.getFileName());
}
return;
}
// I/O Helper
fileSaver = new GPSFileSaver(...);
}
fileSaver对象是一个大的,我们想要保持运行,而不是每次都重新创建。 如果我们没有一个旧的实例,我们只在onCreate()的最后创建fileSaver,因为否则我们将创建一个新的,只是替换旧的,这是至少对性能 。 当onCreate()方法完成时,我们不保留对旧实例的引用,因此它应该适用于Java GC。 最终的结果是,尽管重新创建,活动似乎保持运行良好的屏幕旋转。
另一种可能性是在AndroidManifest.xml中设置android:configChanges =“orientation”,但这种方法有点冒险。
- Android 系列 2.4用户旋转设备时保留数据
- android设备设置改变时的数据保留和恢复
- Android——处理设备旋转Activity销毁时临时数据丢失的问题
- Android | 设备旋转
- 卸载时保留用户文件夹
- onSaveInstanceState(...) 方法设备旋转数据保存
- Android 图像系列: 旋转Bitmap
- Android-四元数-控制VR设备的旋转
- 设备旋转
- zabbix数据保留时长
- Android 整数数据保留2位小数点
- android 数据库升级(保留原先数据)
- Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据
- 在iOS设备上保存用户数据
- 面试问题 activity生命周期,当设备旋转时android生命周期方法的调用顺序
- Android自定义用户数据
- Android设备无法彻底删除用户资料
- android读取usb设备数据
- LeakCanary直面项目中的内存泄露
- 支付宝不止怀有“社交梦”,社区金融才是它的野心所在
- Shortest Palindrome
- oracle chr(10) 与java 中的\n 等价
- ADO.NET Entity Framework 5.0 小结
- Android 系列 2.4用户旋转设备时保留数据
- android横竖屏切换、按home键、按返回键所触发的生命周期
- iOS App上传到苹果应用商店App Store教程
- SharedPreferences、editor
- Error:java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessException
- Spring Boot中使用MongoDB数据库
- CMD下将JAVA程序打包成 jar
- 究竟啥才是架构的“高可用”
- 报错处理(三)