2012-02-08 53 views
27

我想用所有的应用程序数据(类似于首选项)保存json文件,但我不知道限制大小是多少,因为如果应用程序无法使用此文件,它可能无法正常工作。这是事先知道的信息,操作系统根据可用的大小为您的应用或其预留一些空间。是否有最大尺寸的Android内部存储分配给应用程序?

更新: 我真的不关心外部存储,因为并不总是在设备可用,可以改变(SD卡),我可以检查internal storage using this但是这不是我想知道,我想什么知道是否为设备的内部存储分配了内存大小?

+4

如果你有一个* JSON *文件,你担心可能会太大,你做错了。 – CommonsWare 2012-02-08 18:10:53

+2

即时通讯不担心文件正在_too big_,即时通讯担心应用程序留下的内部存储是_too small_ – Jimmy 2012-02-08 18:23:27

回答

35

如果您使用Environment.getExternalStorageDirectory()(或API等级8及以上的Context.getExternalFilesDir())作为您的json文件的位置,那么我相信这个大小将受到外部存储空间(通常是SD卡)的限制。对于大多数设备,我相信Android内置的外部文件存储没有固定的限制。 (内部存储器是另一回事,设备制造商可能会施加相当严格的限制,可能低至所有应用程序共享的100MB)。

更新:请注意,根据compatibility definition for Android 2.3(第7.6.1节),设备应该有相当的有点内存:

设备实现必须至少有150MB的非易失性存储可用于用户数据。也就是说,/ data分区必须至少为150MB。

除了上述要求,设备实现应该至少有1GB的非易失性存储可用于用户数据。请注意,这个更高的要求计划在Android的未来版本中成为最低要求。强烈建议设备实现现在符合 这些要求,否则它们可能不符合未来版本Android的兼容性。

此空间由所有应用程序共享,因此可以填满。没有保证每个应用程序可用的最低存储空间。 (这样的最低保证是毫无价值对于需要存储超过最低的应用程序,并会为存储较少的应用程序的浪费。)

编辑:从compatibility definition for Android 4.0

设备实现必须至少有350MB的非易失性存储可用于用户数据。也就是说,/ data分区必须至少为350MB。

compatibility definition for Android 4.3

设备实现必须具有可用于用户数据的非易失性存储至少512MB。也就是说,/ data分区必须至少为512MB。

有趣的是,实现应该提供至少1GB的建议保持不变。

+0

问题已更新。 – Jimmy 2012-02-08 17:59:04

+0

@Jimmy - 我们在这里谈论的文件有多大? – 2012-02-08 18:22:05

+0

文件真的不大可以说是KB的一对,但事情是如果操作系统在某些情况下不会为我的应用程序保留任何内容,那么即使小文件也会成为问题。 – Jimmy 2012-02-08 18:27:04

13

我从来没有目睹过它限制单个应用程序,并且我已经在应用程序Files dir中保存了一些相当大(200 MB)的视频文件进行了测试。

对于内部存储,我认为您只能受限于所有应用程序共享的内部存储量。正如@Ted Hopp所提到的,在一些较老的和较低端的设备上相当小。但是在更新的和更高端的设备上,他们已经开始将其合理化,尽管该设备有很大的空间,但它仍然可以被其他应用程序占用(因此您需要测试将会发生什么这种情况)。

还值得指出的是,如果您使用外部存储,如SD卡,那么您的json文件将在技术上由用户编辑。他们可以在文本编辑器中打开它,如果他们有任何愿望,可以开始更改原始值。 (如果您选择使用内部存储器,这也是可能的,但它需要一个根植设备,而如果存储在SD卡上则不需要root)

因此,如果您存储的信息是您宁愿用户无法手动编辑,您可能需要考虑这一点。