Android - 不同存储选项的生命周期

Posted

技术标签:

【中文标题】Android - 不同存储选项的生命周期【英文标题】:Android - Life time of different storage options 【发布时间】:2014-04-04 16:05:26 【问题描述】:

android 提供以下数据存储选项:

Shared Preferences - 将私有原始数据存储在键值对中。

内部存储 - 将私人数据存储在设备内存中。

外部存储 - 将公共数据存储在共享外部存储上。

SQLite 数据库 - 将结构化数据存储在私有数据库中。

缓存 - 在应用程序运行期间缓存数据。(可能会在空间不足时清除)

我想知道的是这些存储的使用寿命。

    应用程序关闭时清除哪些存储(显然是缓存) 重新安装应用程序会清除哪些存储空间 应用程序更新时清除哪些存储 卸载应用程序会清除哪些存储 应用程序清除数据会清除哪些存储 手机恢复出厂设置会清除哪些存储 ROM 升级/更改会清除哪些存储

这个问题的扩展是,就丢失未经授权的资源访问而言,使用哪种存储我的数据更安全 > (用户、应用程序在 root 的情况下)。

【问题讨论】:

【参考方案1】:

应用程序关闭时清除哪些存储(显然是缓存)

缓存

重新安装应用程序时清除哪些存储

缓存

应用程序更新时清除哪些存储

缓存

卸载应用程序会清除哪些存储

缓存、SQLite、共享首选项

应用程序清除数据清除哪些存储

缓存、SQLite、共享首选项

手机恢复出厂设置会清除哪些存储

清除所有数据,但不清除外部存储数据

这个问题的一个扩展是,使用哪种存储我的数据在丢失和未经授权的资源(用户、root 应用程序)访问方面更安全。

最好将数据以加密形式存储在 SQLite 中。如果您的设备已植根,则意味着您甚至可以访问 SQLite。

【讨论】:

这个答案只是部分正确,需要更新:请注意,存储在 InternalStorage 中的应用数据也将在应用卸载、应用“清除数据”和执行出厂重置后被擦除。使用 getExternalFilesDir() 存储在 externalStorage 上的应用程序私有数据也是如此。这些数据也将在应用卸载时删除,以及当用户通过设置清除应用数据时。更多关于谷歌开发者storage options页面的信息。【参考方案2】:

应用关闭:应用关闭后缓存文件不会被删除。

根据 android 文档,

When the device is low on internal storage space, Android may delete these cache files to recover space. However, you should not rely on the system to clean up these files for you. You should always maintain the cache files yourself and stay within a reasonable limit of space consumed, such as 1MB. When the user uninstalls your application, these files are removed.

应用重新安装和卸载:CacheShared PreferencesInternal StorageDatabases将在卸载应用时被删除。

应用程序更新:通常您在以前版本中的所有内容都会恢复。文档对此也不清楚。

应用程序清除数据:除External Storage 之外的所有内容都将被永久删除。

恢复出厂设置:恢复出厂设置将清除除预装应用程序之外的所有应用程序及其数据。您可以使用 google 帐户恢复您的应用,但不能使用数据(如果数据未使用 BackUp Api 备份。

对于你的最后一个问题, 如果您将数据存储在设备中,则存在 NO Secure 数据存储。甚至可以使用 USB 文件选项删除外部数据存储。对于安全数据,您应该在服务器上维护用户数据并按需获取。

希望我是清楚的。

【讨论】:

【参考方案3】:

在回答您的问题时,默认情况下,持久存储(SQL、内部\外部存储、SharedPreferences)的行为基本相同,而缓存的行为不同。

持久化存储 - 在以下情况下不会被清除:1、2、3 - 在其他情况下会被清除。

内部\外部存储 - 可以在应用程序删除后保留下来(如果配置得当),因此,如果您专门处理此问题,则有可能不会在 4 和 5 上被删除。

缓存 - 在所有情况下都会被清除(在某些情况下,您可能能够在应用程序关闭后访问缓存,但不可靠)。

7*(ROM 更新可以使用备份解决方案保留应用程序数据,否则,将与 6 相同)

【讨论】:

以上是关于Android - 不同存储选项的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Android 的生命周期

跟着Google学Android —— 3.1 管好Activity的生命周期

cookielocalStoragesessionStorage生命周期

Android 片段生命周期

深入剖析Android四大组件——Activity生命周期具体解释

[Android]Activity的生命周期