Android保存设置和数据的最佳方式

时间:2015-07-24 13:46:12

标签: android file sharedpreferences settings serializable

我需要为设置保存一些intboolean,现在我正在使用SharedPreference进行设置,我想知道是否有这种方式有问题,我能确保这些数据不会被触及或丢失吗?使用这种方式有禁忌症吗?

现在真正的问题是:我需要保存一些字符串,这基本上就像某些网址和网址的文字说明,但我并不认为SharedPreference会起作用因为我不知道这些物品有多少,它们可能是5,8,10,我不知道,这些数据将通过互联网下载,所以:我怎么能保存它们?

我并不擅长Android编程,但我很久以前就研究过Java,我可以将它保存为文件并解析它吗?我想我可以创建一个Serializable包装器类并将文件写入文件但是......它真的安全吗?用户可以编辑这些文件或删除它们,我认为如果我能将它们保存在某些文件中可能会更好..."锁定仅限应用程序"文件夹,甚至存在这样的事情?如果是,我该如何访问它?

4 个答案:

答案 0 :(得分:2)

SharedPreference基于存储在app文件夹中的xml文件。它像另一个xml文件上的写信息一样安全。它主要用于app配置。对于其他类型的数据,最好使用数据库(SQLite)或json(比xml更高的性能)。

在android中,您将使用已经在桌面版Java上学习的许多概念。但该平台非常不同,特别是在性能方面。

答案 1 :(得分:2)

Android应用程序就像Linux系统中的用户一样,每个用户都有自己的私有空间,应用程序也是如此,每个应用程序都有自己的存储空间,而这就是与应用程序相关的数据。 默认情况下,SharedPreferences存储在MODE_PRIVATE中,因此只能由您的应用访问它们,其他任何外部应用都无法访问它们。如果您想要分享部分偏好设置,可以选择其他储存模式MODE_APPENDMODE_WORLD_READABLEMODE_WORLD_WRITEABLE

关于MODE_PRIVATE的所有内容都适用于非Root设备。

有关Android安全性的详细信息,您可以查看这些resources

答案 2 :(得分:2)

sharedPreferences使用起来非常安全,加上您声明要实例化的类的隐私,只能由您的应用程序使用,并且还可以授予其他应用程序使用属性Context.MODE_PRIVATE的权限。任何人都可以看到您的设置的唯一方法是成为root用户,并且用户知道要根据您的偏好查找.XML的路线,个人SharedPreferences是完全可行的。另一种方法是使用SQLite数据库,但是作为root用户首选项可以访问.DB并修改任何数据库管理器数据,例如navicat

答案 3 :(得分:2)

我强烈建议您使用Facebook Conceal。 root用户可以在使用的MODE上独立修改SharedPreferences,而隐藏的keychain文件则不能。

Conceal创建的加密文件只能由应用访问,您的设置是安全的。当然用户可以删除此文件,但不能阻止删除数据,只能修改。

非常容易使用:

// Creates a new Crypto object with default implementations of 
// a key chain as well as native library.
Crypto crypto = new Crypto(
  new SharedPrefsBackedKeyChain(context),
  new SystemNativeCryptoLibrary());

FileOutputStream fileStream = new FileOutputStream(file);

// Creates an output stream which encrypts the data as
// it is written to it and writes it out to the file.
OutputStream outputStream = crypto.getCipherOutputStream(
  fileStream,
  entity);

// Write plaintext to it.
outputStream.write(plainText);
outputStream.close();

享受;)