2010-11-23 58 views
7

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

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

回答

2

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

至于在手机上存储敏感数据,你真的没有选择只在内存中存储它(使用某种如你所建议的单身人士)。只要你的应用程序进入后台,它可以立即被杀死,所以你坚持你想要以某种方式保留的数据。也就是说,如果您将数据保存到Internal Storage,则手机上的任何其他应用程序都无法使用此数据(因为手机没有固定,因为如果使用手机,这很容易解决)。我确信这同样适用于使用SQLite存储的数据,但我不能100%确定,所以我不能保证。

但基本上,如果您确定您的应用只能在非root用户的设备上运行,则应该非常安全地将数据保存到内部存储。如果这还不够好,那里有javax.crypto包,但我从来没有使用过,所以我什么都不能说。

+1

嗨Nailuj,谢谢你的详细解答!所以我认为唯一的方法是通过扩展android.app.Application类来存储数据,因为这是我能够“安全地”在低内存中存储获取数据的唯一机会(使用我自己的单例实现将不知道系统杀死应用程序时)。如何序列化数据并将它们与javax.crypto一起存储到文件系统中,并在内存可用(或应用程序状态恢复)时重新加载该数据? – 2010-11-23 09:13:44

相关问题