【问题标题】:What's a safe way to store data in Android?在 Android 中存储数据的安全方法是什么?
【发布时间】:2015-02-17 05:54:18
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: android garbage-collection singleton


    【解决方案1】:

    虽然我的单身人士被垃圾收集并且他们的数据被擦除,但我已经开始遇到这个问题。

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

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

    单例模式在 Android 上没有任何意义吗?

    作为缓存机制,没问题。

    我不确定还能做些什么来保证我的数据在我的应用程序的整个生命周期内都是安全的

    静态数据成员在进程的“生命周期内都是安全的”。如果您希望数据在进程终止后仍然存在,则需要将该数据存储在数据库中,SharedPreferences 或其他类型的文件中。

    【讨论】:

    • 好的,我们可能在这里讨论语义。我的应用程序尚未终止,当我从任务列表中选择它时,它会进入与之前相同的活动。因此,Android 可能已经终止了该进程,但它正在尝试恢复它,就好像它不是一样。
    • 一旦对它们的所有引用都消失(活动结束等),它们就会被垃圾收集。这就是为什么它们应该存储在应用程序级别。
    • @Dennis:“所以 Android 可能已经终止了进程,但它正在尝试恢复它,就好像它不是一样”——正确。这是完全正常的行为。但是,最近任务列表不是正在运行的进程列表。 Android 会一直终止后台进程,以便为其他进程释放系统 RAM。如果用户返回到您的应用,但它仍在最近任务列表中,Android 不仅会为您的应用创建一个进程,还会尝试调出用户上次进入的活动。
    • @wblaschko:OP 引用了“单例”。单例的标准 Java 实现是通过静态数据成员实现的。静态数据成员不能被垃圾收集。您不需要使用自定义 Application 对象。
    • 抱歉,我知道我的术语已关闭。我只是想弄清楚如何处理活动被 Android 激活并且由于这种行为而没有任何我期望它拥有的数据的情况。
    【解决方案2】:

    您是否保留对应用程序 (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/

    【讨论】:

    • 我没有在应用程序中引用它们,我会尝试的。这是一种可接受的方法还是建议不要这样做?我想知道我是否应该注意 onTrimMemory 并在内部重置我的应用程序以在它再次激活时强制初始加载。
    • 这是一种可接受的方法,这样会引用单例,直到您的整个应用程序从内存中删除(此时,您说无论如何擦除都是安全的)。我通常使用带有 getter 的私有静态变量。
    • 这个方法对我不起作用。可悲的是,我必须像你和@CommonsWare 所建议的那样寻找更安全的东西。
    猜你喜欢
    • 2020-09-28
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2014-06-26
    • 2013-02-11
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多