【问题标题】:Where to store large application data on android devices?在 android 设备上存储大型应用程序数据的位置?
【发布时间】:2011-05-14 08:05:13
【问题描述】:

我目前面临一个问题,我应该将我的对象结构存储在 android 设备上。

用例:我正在开始调用应用程序服务器(在AsyncTask 的大力帮助下),从服务器获取众所周知的响应(xml-response),解析数据并将其最终转换为我的对象结构(高度复杂的类图,类之间有许多关联)。到目前为止,它的工作,感谢伟大的 XMLPullParser ;) 我想知道在我的活动之间存储(当然共享)获取的数据的位置......我已经知道我可以使用 sqlite,但我没有或映射器(如 j2ee 环境中的休眠)。我也不允许将这些敏感数据存储在设备上(在 sqlite 或文件系统中),所以我的第一种方法是将这些数据存储在一个单例中(这当然是保存在内存中......)。但是当系统内存不足时会发生什么,android可以“破坏”存储在我的单例中的数据吗?我已经阅读了有关扩展 android.app.Application 类的信息……那么在 android 设备上安全地存储对象数据(从“webservice”调用)的最佳方法是什么?

顺便说一句:Android 开发就是这么酷!我们目前正在将 Windows Mobile 6.5 应用程序移植到 Android 和 iPhone,而我的同事(负责 iPhone-dev)一直在抱怨^^

【问题讨论】:

    标签: android security object store


    【解决方案1】:

    关于 OR 映射器,前几天我遇到了OrmLite。它是 Java 的通用 ORM 工具,但它也有一些特殊的修改使其适用于Android。我还没有时间自己测试它,但它看起来很有希望:)

    至于在手机上存储敏感数据,您确实无法选择仅将其存储在内存中(按照您的建议使用某种单例)。一旦您的应用程序进入后台,它可能会立即被终止,因此您必须以某种方式持久化您想要保留的数据。话虽如此,如果您将数据保存到Internal Storage,这将不适用于手机上的任何其他应用程序(假设手机未植根,因为如果已植根,这很容易解决)。我相信这同样适用于您使用 SQLite 存储的数据,但我不能 100% 确定,所以我不会保证。

    但基本上,如果您确定您的应用只能在非 root 设备上运行,您应该可以非常安全地将数据保存到内部存储中。如果这还不够好,还有javax.crypto 包,但我从未使用过它,所以我真的无话可说。

    【讨论】:

    • 您好 Nailuj,感谢您的详细回答!所以我认为唯一的方法是通过扩展 android.app.Application 类来存储数据,因为这是我可以“安全地”将获取的数据存储在低内存上的唯一机会(使用我自己的单例实现不会知道当系统终止应用程序时)。如何序列化数据并使用 javax.crypto 将它们存储在文件系统中,并在内存可用(或应用程序状态恢复)时重新加载该数据?
    • @tim.kaufner:是的,这就是我提到javax.crypto的原因。如果没有其他解决方案是“足够安全”的解决方案,您可以使用它来加密您的数据并将其存储到内部存储(或就此而言的 SQLite 数据库)。除了您添加了额外的加密/解密层之外,它与您通常在 Android 应用程序中处理状态的方式并没有什么不同(将您想要保留的任何数据保留在 onPause() 中并在 onCreate() 中重新加载它等)。
    • 我会试一试 :) 另外感谢您提到 OrmLite 库,不知道有一个“便携式” OR-mapper,但我更喜欢将数据存储在文件系统上或(如果安装)在外部SD卡上。但我不确定大型对象集的序列化/反序列化在这种设备上是否很快......我会试试看会发生什么:)
    猜你喜欢
    • 2012-06-04
    • 2014-07-11
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多