如何在安卓应用程序中保存数据

移动开发 Android
这是关于在应用中保存数据和应用状态系列文章中的第一篇。在安卓SDK中有许多机制可以用来保存数据,决定使用哪一种和何时触发该操作常让人困惑。 当创建个人应用程序的时候你想要做的第一件、最容易的事就是保存一些用户输入的、明确需要保存的数据。

这是关于在应用中保存数据和应用状态系列文章中的***篇。在安卓SDK中有许多机制可以用来保存数据,决定使用哪一种和何时触发该操作常让人困惑。 当创建个人应用程序的时候你想要做的***件、最容易的事就是保存一些用户输入的、明确需要保存的数据。下面是一些常用来持久化存储的方法:

  • 数据保存最基本的方法就是保存到外置存储设备的文件上。这种存储可以被用户和所有的应用程序获得,当设备当作外置存储挂在的时候也可以看到。即使 你的应用卸载了该文件也会一直保留,除非你用GetExternalFileDir方法获得保存文件的文件夹。这最适用于被用户编辑过的文件,即使应用卸 载了也***一直保留着,例如图片和文档。
  • 你也可以把文件保存为内部存储,这对于你的应用程序是私有的。这种情况下,用户和其他应用程序都得到这些文件,并且当你应用卸载的时候文件将被删除。这最适用于保存一些简单的数据,避免了处理数据库的开销。
  • 另外,你也可以把用户的配置保存成 键/值对,使用Preference API来创建SharedPreferences文件。你可以创建一个PreferenceActivity或者包含 PreferenceFragment的Activity保存参数配置,他们的布局中都有Preferences 对象来代替View对象。
  • ***,如果你要保存的数据结构很复杂,每个应用都有自己的私有的SQLLite数据库来保存数据。如果你的应用被卸载,这些数据也将被销毁。

另外,有些情况需要保存应用程序的当前状态,因为某个事件被触发。例如:

  • 当设备被旋转的时候,当前的Activity被重新创建,布局也被调整。
  • 当你的应用被用户或者其他应用放到后台去运行的时候,例如手机接到一个电话。另外,用户打开了应用程序的另一个Activity,当前的Activity也会被放到后台。任何在后台运行的Activity当内存不足的时候都可能被回收,当需要的时候再被重新创建。
  • 当用户明确地关闭了应用。

以上的情况,你都需要持久化保存用户输入的数据。当Activity被放到后台或者在销毁的过程中,onPause方法总是被调用,紧接着是 onStop即使UI被完全隐藏。所以***在OnPause方法中保存数据。随后,当用户再次接触之前的Activity,如果它仍在内存中 onRestart,onstart和onResume方法将被调用,如果已经被回收了就需要被重新常见,那么onCreate、onStart、和 onResume将被调用。所以如果你想在所有情况下都再次显示之前的数据,你应该在onResume方法中恢复UI。

如果不需要***的保存数据而只想保存UI的状态,你可以在onSaveInstanceState方法中把数据保存在Bundle中。该方法不能用 来保存数据,因为它不是Activity生命周期的一部分,仅仅当Activity需要重新创建或者被放到后台的时候被UI事件触发,被***销毁的时候该 方法不被调用。所以它仅用于保存一些暂时性View状态。有些数据已经被安卓SDK保存了,但你可能需要保存些额外的信息,例如,假如你有些自定义的控 制,当用户按返回键回到Activity的时候,UI的状态需要被恢复,如果Activity仍在内存中,保存有状态信息的bundle对象可以在 onRestoreInstanceState方法中获得,如果Activity被回收了需要重新创建,可以在onCreate方法中获得bundle对 象。

原文链接: javacodegeeks   翻译:黄瓜

译文链接: http://blog.jobbole.com/71882/

责任编辑:闫佳明 来源: blog.jobbole
相关推荐

2020-05-20 09:40:34

云计算数据安全

2011-03-31 13:07:00

Web应用程序漏洞

2011-03-31 13:03:04

2011-03-31 13:11:45

Web应用程序

2011-03-31 13:05:10

2016-03-12 21:46:56

Inspeckage应用程序动态分析

2023-06-12 17:59:48

2018-07-16 15:21:23

Windows 10Windows任务栏

2019-08-13 15:39:27

Linux应用程序

2018-03-28 08:30:01

Linux仓库应用程序

2018-10-29 10:13:29

Windows 10应用程序卸载

2011-01-28 09:12:53

jQuery Mobi

2016-08-02 10:34:17

LinuxWindows双启动

2019-01-04 10:45:31

Windows 10Android应用程序

2018-02-27 13:45:01

2019-04-12 10:55:50

LinuxAnbox安卓应用程序

2011-10-13 16:34:30

MeeGoQt插件

2021-10-21 07:08:02

Windows 11操作系统微软

2019-05-08 11:30:41

MicrosoftWindows 10后台应用程序

2016-02-02 13:40:17

开源应用框架
点赞
收藏

51CTO技术栈公众号