Android Activity状态保存与恢复实战
96 浏览量
更新于2024-08-29
收藏 143KB PDF 举报
"这篇文章除了探讨Android中Activity的保存和恢复状态,还通过一个简单的例子展示了如何处理数据丢失的问题。文章指出,当Activity被Home键最小化时,它并不会被销毁,但某些操作可能导致数据丢失。文章的Java代码片段展示了如何在Activity中使用EditText和Button,并实现了点击事件来设置和读取数据。"
在Android开发中,Activity是用户界面的基本单元,用于展示应用的屏幕。当用户点击Home键时,当前运行的Activity会被放入后台,而不是直接销毁。这意味着如果用户再次打开应用,Activity的状态应该尽可能恢复到之前的状态。然而,在某些情况下,如系统资源不足或屏幕旋转等,Activity可能会被销毁并重建,这时就需要开发者手动保存和恢复Activity的状态。
在给出的代码中,可以看到一个名为MainActivity的类继承自AppCompatActivity,并实现了View.OnClickListener接口。MainActivity中有两个Button(buttonSet和buttonRead)和一个EditText(editText)。buttonSet用于设置EditText的文本,而buttonRead则用于读取EditText的文本。在onClick方法中,根据按钮的id来执行不同的操作,例如设置EditText的文本为"圆周率为:"并赋予变量pai一个值,或者读取EditText的文本。
Android提供了两种主要的方式来保存Activity的状态:实例状态和持久化存储。
1. 实例状态:当Activity被暂时隐藏(如按Home键)或因配置更改而重建时,可以通过覆盖`onSaveInstanceState(Bundle outState)`方法来保存关键的临时数据。在这个方法中,可以将数据放入Bundle对象,系统会在必要时恢复这些数据。例如,可以将pai的值保存到outState中:
```java
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putDouble("PAI_KEY", pai);
}
```
然后在`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle savedInstanceState)`中恢复数据:
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
if (savedInstanceState != null) {
pai = savedInstanceState.getDouble("PAI_KEY");
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
pai = savedInstanceState.getDouble("PAI_KEY");
}
```
2. 持久化存储:对于需要长期保存的数据,可以使用SharedPreferences、SQLite数据库、内部/外部存储等方法。例如,可以将 pai 的值保存到SharedPreferences:
```java
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putDouble("PAI_KEY", pai);
editor.apply();
```
然后在Activity创建时读取:
```java
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
pai = prefs.getDouble("PAI_KEY", 0.0); // 使用0.0作为默认值
```
通过以上方法,开发者可以在Activity被销毁和重建时正确地保存和恢复用户界面的状态,提供更好的用户体验。在实际开发中,应根据数据的重要性和类型选择合适的方式保存Activity的状态。
2014-11-08 上传
2014-03-11 上传
点击了解资源详情
2020-09-01 上传
2012-10-14 上传
2014-05-13 上传
2021-01-20 上传
2020-09-03 上传
点击了解资源详情
weixin_38554186
- 粉丝: 0
- 资源: 955
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明