2011-12-16 89 views
9

我读过这Android save app settings/data in Internal/External Storage,但我不认为我真的得到了答案。缓存图像和数据时应该使用内部还是外部存储?

我开发一个应用程序,我应该存储一些“缓存”的数据,如图像的打,一些字符串(JSON)。

最初我在SD卡上存储所有内容(外部存储)但后来我认为这可能会被最近的设备中的SDCard弃用弃用。

读完一小段后,我明白外部存储不仅是SD卡,而是“可移动存储介质(如SD卡)或内部(不可移动)存储器”,因此不应该弃用。 ..他的共享空间,并没有存储在那里的文件的所有权,所以第一个问题是,我无法删除它们,当应用程序被删除。

因此,我将更改为内部存储,以避免将文件/图像“公开”并在删除应用程序后删除它们。

这是推荐的方法?

在设备上较旧的低内部存储但在SD卡上有很大的空间,这是一个好办法?

我的应用程序支持从1.6到4.0(到目前为止),所以我有很多传统设备的...我必须对所有的应用程序工作(井)。

期待一些有趣的答案!

+0

即时将我的json字符串保存为sharedpreference作为json字符串,谁知道,是字符串:)。 – poitroae 2011-12-16 15:52:19

+0

不过,问题仍然存在于图像中:-) – neteinstein 2011-12-16 15:54:32

+1

您应该使用私人内部存储,以便用户无法手动修改此数据,并且在卸载应用程序时(希望永不:))它将被删除。您应该检查设备内部容量是否足够容纳数据。如果是,请将其保存在内部,如果不是,则唯一方法是将其保存在SD卡上。 – poitroae 2011-12-16 15:58:55

回答

4

这取决于你想要存储的数据的类型。

你提到它的缓存数据,以便myassumption是,如果由于某种原因,这一切消失它不应该的问题。这让我相信你应该使用getCacheDir()。在这种情况下,如果缓存变得过大,系统将删除文件,因此内部存储空间不足的设备不应该出现问题(尽管建议您自行管理这个问题),但它相对安全并且会由应用管理所以如果有卸载它将被删除。

getExternalCacheDir()在2.2中引入这样没有任何使用到你,除非你想检测的版本和2个缓存目录getExternalCacheDir()之间切换,不提供安全性,以便数据可以通过反正能够访问SD进行访问卡。我认为你可能想要这样做的唯一原因是因为你希望获得缓存的大小,但是从描述来看,数据似乎并不过分。

从评论更新:

虽然这是它的高速缓存中的特定情况下...但我不想 每当系统要删除它。这是我需要应用程序决定何时清除的缓存 。 存储在“正常”内部存储上,而不在缓存中的主要问题是什么 dir?

如果您到了系统正在清理内部缓存数据的阶段,因为存储量太低,您应该让它清理这类应用程序数据。通过使用标准的内部数据存储,您可以避开这个安全警卫,这可能会导致比删除应用程序数据更令人不快的问题。

如果您的数据具有很高的重要性,那么我会建议尝试识别更重要的特定数据并分别进行管理。如果您确定的这些数据需要保证安全,那么使用文件或数据库(取决于数据类型)的内部存储似乎是您唯一真正的选择,但您必须警惕此数据的构建。

从评论

你认为怎么样使用SharedPreferences保存字符串数据更新? SharedPreference string保存大小是否有限制?这是否是(好的) 的可能性?

我已经使用共享偏好相对大的JSON字符串存储在一个没有问题的过去,我发现它比使用数据库的基本数据类型(和字符串),那里有值仅限于保存简单。然而,当你有图像或很多值时,管理变得更加复杂。在存储空间方面,您也会遇到与标准内部存储器相同的问题。

0

我会使用内部存储缓存。这将消除用户能够访问您的应用中使用的文件的机会。我会去内部

+0

你不觉得它可能是老设备的问题吗? – neteinstein 2011-12-16 16:19:06

0

我会继续在外部存储的图像,可能是在一个“隐藏”的文件夹(在文件夹的名称的beggining加点:.folder),也是一个媒体扫描“躲避”(.nomedia),因为正如您所指出的那样,您希望应用程序能够在旧设备中工作,并且正是这些设备不需要太多的内存。

您也可以在应用程序中添加一个选项来删除该文件夹,以防万一用户想要卸载,他可以在之前这样做。

相关问题