我已经阅读了Android save app settings/data in Internal/External Storage,但我认为我没有得到答案。
我正在开发一个应用程序,我应该存储一些“缓存”数据,就像十几个图像和一些字符串(json)。
最初我将所有内容存储在SD卡(外部存储设备)上,但后来我认为在最近的设备中SDCard弃用可能会弃用此功能。
读了一下之后,我明白外部存储不仅仅是SD卡,而是“可移动存储介质(如SD卡)或内部(不可移动)存储”,因此不应该弃用它。 .it的共享空间,并没有对存储在那里的文件的所有权,所以第一个问题是删除应用时我无法删除它们。
所以我更改为内部存储空间,以避免文件/图片“公开”,并在删除应用后删除它们。
这是推荐的方法吗?
在内存较低但SD卡空间较大的设备上,这是一个很好的方法吗?
我的应用程序支持从1.6到4.0(到目前为止)所以我有很多遗留设备......我必须让应用程序正常工作(好)。
期待一些有趣的答案!
答案 0 :(得分:4)
这取决于您想要存储的数据类型。
你提到它的缓存数据所以我的假设是,如果由于某种原因它都会消失,这应该无关紧要。这让我相信你应该使用getCacheDir()
。在这种情况下,如果缓存变得太大,系统将删除文件,因此具有低内部存储的设备不会出现问题(尽管建议无论如何都要管理这个问题),它相对安全并且将由应用程序管理因此,如果有卸载,它将被删除。
getExternalCacheDir()
是在2.2中引入的,所以对你没有任何用处,除非你想检测版本并在2个缓存目录之间切换getExternalCacheDir()
不提供安全性所以可以访问数据无论如何都可以访问SD卡。我认为您可能想要这样做的唯一原因是因为您希望缓存的大小,但从您的描述来看,数据似乎并不过分。
评论更新:
虽然这是一个特殊情况,它的缓存......但我不想要 它会在系统需要时被删除。这是一种缓存 我需要应用程序决定何时清除。主要问题是什么? 存储在“正常”内部存储器而不在缓存上 DIR?
如果您到达系统正在清理内部缓存数据的阶段,因为存储空间很小,那么您应该留下它来清理这种应用程序数据。通过使用标准的内部数据存储,您可以绕过这个安全防范,这可能会比删除应用程序数据产生更多令人不快的问题。
如果您的数据非常重要,那么我建议您尝试识别更重要的特定数据并单独管理。如果您确定的这些数据需要是安全的,那么使用文件或数据库(取决于数据类型)的内部存储似乎是您唯一真正的选择,但您必须警惕这些数据的构建。
从评论中更新
您如何看待使用SharedPreferences保存字符串数据? SharedPreference字符串保存大小是否有限制?这是一个(好) 可能性?
我过去使用共享首选项存储相对较大的json字符串没有问题,我发现它比使用数据库存储有限值的原始数据类型(和字符串)更简单。但是,当您拥有图像或大量值时,管理变得更加复杂。此外,您将遇到与存储空间方面的标准内部存储相同的问题。
答案 1 :(得分:0)
我会将内部存储用于缓存。这将消除用户访问应用中使用的文件的机会。我会去内部
答案 2 :(得分:0)
我会将图像保存在外部存储设备上,可能是在“隐藏”文件夹中(在文件夹名称的开头添加一个点: .folder ),还有一个Media Scanner“avoider” ( .nomedia ),因为正如您所指出的那样,您希望应用程序在旧设备中工作,而且正是这些设备不需要太多内部存储器。
您还可以在应用程序中添加一个选项以删除该文件夹,因此如果用户想要卸载,他可以在此之前执行此操作。