在 Android 中存储数据的安全方法是什么?

What's a safe way to store data in Android?

我一直在使用单例来存储应用程序启动时加载的数据。此数据在我的应用程序的整个生命周期内使用,但不需要为将来的发布而保留。尽管我的单身人士被垃圾收集并且他们的数据被擦除,但我已经开始遇到这个问题。单例模式在 Android 上没有任何意义吗?使用本地存储或本地数据库似乎有点矫枉过正,但我​​不确定还可以做什么来保证我的数据在我的应用程序生命周期内是安全的。

谢谢!

I've started hitting the issue though that my singletons are garbage collected and their data is wiped.

不,他们不是。根据定义,单例(静态数据成员)不能被垃圾回收。

很可能,您看到的是 your process is being terminated

Does the singleton pattern just not make any sense on Android?

作为缓存机制,还行

I'm not sure what else to do to guarantee my data is safe for the lifetime of my app

静态数据成员是您的 进程 的 "safe for the lifetime"。如果您希望数据在进程终止后仍然存在,您需要将该数据存储在数据库 SharedPreferences 或其他类型的文件中。

您是否在应用程序的应用程序 (http://developer.android.com/reference/android/app/Application.html) 级别保留对单例的引用?这应该让它们在大多数情况下保持不变(除非它们是 byte[] 或其他巨大的东西)。

然而,最安全的做法是假设数据将被垃圾收集并根据该假设构建您的代码。如果它来自网络,请定义一个异步回调来加载数据,然后填充您的视图。如果它是非用户生成的本地内容,请使用异步从磁盘中获取它。如果它是用户生成的,您可能需要设置一个数据库(您可以在重新启动应用程序时清空该数据库)来跟踪数据。

但是,如果您还没有,请先尝试在应用程序中保留对单例的引用。简介在这里:http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/