Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 共享首选项:长字符串_Android_Preferences_Shared - Fatal编程技术网

Android 共享首选项:长字符串

Android 共享首选项:长字符串,android,preferences,shared,Android,Preferences,Shared,在Android的共享首选项中,有多少数据可以作为值保存的规则吗。是否可以保存例如1 GB大的字符串?我知道最好使用文件,但当时我不需要“干净”的实现。我还没有看到硬限制设置。我一直使用gson将复杂对象存储在sharedReference中,没有问题。只需确保不占用所有设备存储空间。将文件作为文件存储在应用程序目录中 如果不将这些数据存储在首选项中,您的情况会更好 如果应用程序是卸载的,那么您将从清理过程中解脱出来,包目录中的所有文件也是如此 要获取Appdirectory,请使用 /*

在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,因此如此大的字符串肯定会导致问题