Android 共享首选项:长字符串
在Android的共享首选项中,有多少数据可以作为值保存的规则吗。是否可以保存例如1 GB大的字符串?我知道最好使用文件,但当时我不需要“干净”的实现。我还没有看到硬限制设置。我一直使用gson将复杂对象存储在sharedReference中,没有问题。只需确保不占用所有设备存储空间。将文件作为文件存储在应用程序目录中Android 共享首选项:长字符串,android,preferences,shared,Android,Preferences,Shared,在Android的共享首选项中,有多少数据可以作为值保存的规则吗。是否可以保存例如1 GB大的字符串?我知道最好使用文件,但当时我不需要“干净”的实现。我还没有看到硬限制设置。我一直使用gson将复杂对象存储在sharedReference中,没有问题。只需确保不占用所有设备存储空间。将文件作为文件存储在应用程序目录中 如果不将这些数据存储在首选项中,您的情况会更好 如果应用程序是卸载的,那么您将从清理过程中解脱出来,包目录中的所有文件也是如此 要获取Appdirectory,请使用 /*
/**
* Takes the context and gets the current app directory path
*
* @param context
* @return
*/
private static String getAppDirectory(Context context)
{
String appDirectory=null;
try {
appDirectory=context.getPackageManager().getPackageInfo(context.getPackageName(), 0).applicationInfo.dataDir;
} catch (NameNotFoundException e)
{
ATZLog.e(TAG, "error while retriving app directory in getAppDirectory");
e.printStackTrace();
}
return appDirectory;
}
\com.yourpackage\bigfiles\1GbFile.ext
没有其他人可以看到或使用它
还有一件事不切实际,请阅读有关在应用程序目录中存储大量数据的内容
如果您有1GB的字符串数据,那么您的设计可能会有一些奇怪的地方,我不知道SharedRef有任何实际限制,只知道一些指针 java字符串的最大大小为
2^31-1 =about 2 billion characters or roughly 1.86GB
因此,就数据类型本身而言,存储有一个限制
更不用说Android似乎会加载SharedReferences,而随后的引用会从缓存中删除,所以在性能方面,你会花很多时间,因为这肯定会引发异常
It seems a disaster in the making.
是的,您可以保存数据—数据量有多大。您的问题看起来像是应用程序大小有限制吗?:)我想你得到了ansI的一个规则,但如果你试图使用1GB的字符串,你肯定会导致OutOfMemory异常(因为所有变量都保存在内存中)。您必须使用某种InputStream。这似乎有点模糊,因为OP提到它是一个相当大的数据~1GB,我认为这不会验证您的GSON数据集大小。此外,droid缓存SharedRef,因此如此大的字符串肯定会导致问题