【问题标题】:is there a maximum size to android internal storage allocated for an app?为应用程序分配的 android 内部存储是否有最大大小?
【发布时间】:2012-03-01 04:34:12
【问题描述】:

我想保存一个包含所有应用程序数据的 json 文件(类似于首选项),但我不确定限制大小是多少,因为如果应用程序无法使用此文件,它可能无法运行。是否事先知道此信息,并且操作系统会根据可用大小为您的应用程序或应用程序保留一些空间。

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

【问题讨论】:

  • 如果您有一个担心可能太大的 JSON 文件,那么您做错了。
  • 我不担心文件太大,我担心留给应用程序的内部存储太小

标签: android storage android-sdcard


【解决方案1】:

如果您使用Environment.getExternalStorageDirectory()(或Context.getExternalFilesDir() 用于 API 级别 8 及更高级别)作为 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 的建议保持不变。

【讨论】:

  • @Jimmy - 我们在这里讨论的文件有多大?
  • 文件不大,真的可以说几 KB,但问题是如果操作系统在某些情况下不会为我的应用程序保留任何内容,那么即使是小文件也会成为问题。
  • @Jimmy - 你担心的不是问题。如果内部存储空间太满以至于没有空间容纳几 KB 的文件,那么手机几乎无法正常工作。只需使用internal storage,一切都会好起来的。
  • @TedHopp 如果我有 32 Gb 设备,那么我的应用程序可以将 ~26 GB 的数据存储到其内部存储器(数据/数据/包名称/)吗?假设系统数据为 6 GB。
  • @NitZRobotKoder - 这完全取决于设备,但可能不是。制造商可以(并且,出于整体设备性能的目的,通常会这样做)对数据分区的大小进行限制。您可以期待的是,这些限制符合 Google 对设备上任何版本的 Android 的要求。设备的整体内存大小通常与应用程序可用的私有内存量无关。
【解决方案2】:

我从未见过它限制单个应用程序,我之前曾在应用程序文件目录中保存一些相当大 (200 mb) 的视频文件进行测试。

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

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

因此,如果您存储的信息不希望用户选择手动编辑,您可能需要考虑这一点。

【讨论】:

  • 继续创建文件并尝试超过 3.61GB,您将达到限制。它显然在那里。
  • 我存储了 4.5 Gb
  • 我在 64 GB 的设备上存储了 6.86 GB 的内部存储空间,即使我有 10 GB 的可用外部存储空间,它也开始出现空间不足的错误。因此,在 64 GB 设备上,内部存储限制可能约为 6.5 GB。
【解决方案3】:

我认为硬限制约为 3.61GB。

我目前在我的选项卡上安装了 termux。 Termux 运行一个 linux 终端,我可以在其中安装 nodejs 和 npm。从而实质上创建了一个开发环境。我安装的软件包没有太多与空间相关的问题,除非我的设备内存非常低。但是最近。我想我已经达到了这个限制,这让我想到了这个问题并点击了这个页面。

我的设备存储空间超过 1GB,我使用它的空间低至 200MB,没有出现此问题。但是我的 termux 安装已经增长到 3.61GB。我最近开始使用纱线,似乎纱线是一个太空猪。我正在安装一个包,它突然记录: error Could not write file "/data/data/com.termux/files/home/dev/ide/theia/yarn-error.log": "ENOSPC: no space left on device 所以它破坏了安装并认为我真的用完了空间,但我没有。进一步检查显示,我在内部存储中仍有上述空间,并且 yarn 占用了 750MB,其中 npm 仅在缓存中大约 500MB。从那以后我一直在使用 npm,但只需要使用 yarn,因为 Theia 的安装并没有很好地使用 npm。 Theia 似乎使用 yarn 作为他们的包管理器。所以 3.61GB 是应用 + 数据的硬性限制。

删除一些软件包并减少其他冗余软件包使用的一些空间,我获得了空间来创建文件并随意安装,但是一旦我再次达到 3.61GB !繁荣!!!就是这样,我不能再创建任何文件了。

我不认为这是有据可查的,但它正在发生。

我正在使用棒棒糖 (android 5.1)

要断言这一点,其他人应该尝试使用在其内部沙箱中创建非常大文件的应用程序。不在内部存储中,而是在其私有数据区域中。我相信你很可能会达到这个硬性限制。

【讨论】:

    【解决方案4】:

    至少在某些设备上,/sdcard/Android/data/ 中的每个应用肯定有 3.5 GB 左右的上限。这也适用于 Google 为官方 Android 模拟器提供的图像。 当我在某个使用 Unity 构建的下载大量图像、视频、音频数据的 Android 应用程序中反复出现“磁盘空间不足”错误时,我注意到了这一点。每次在上述位置的文件夹增长到大约 3.5 GB 时都会发生这种情况。没有多少清理空间可以解决这个问题。 然而,关于这种行为的文档似乎为零。

    【讨论】:

    • 我在 64 GB 的设备上存储了 6.86 GB 的内部存储空间,即使我有 10 GB 的可用外部存储空间,它也开始出现空间不足的错误。因此,在 64 GB 设备上,内部存储限制可能约为 6.5 GB。
    • @Kolitha 你能说出你看到限制的设备吗?
    • @AndyJoiner 已经有一段时间了,所以我记不太清了,但我相信我的观察结果是 1. Sony Xperia M2 2. Android 7 官方 AVD
    【解决方案5】:

    更新泰德的评论;

    来自compatibility definition for Android 7.0

    Android TV 设备必须至少有 4GB,而其他设备实现必须至少有 3GB 非易失性存储空间可用于应用私有数据。

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 2023-03-03
      • 2018-06-16
      • 1970-01-01
      • 2011-04-01
      • 2021-07-20
      • 2019-05-12
      • 2014-11-23
      • 1970-01-01
      相关资源
      最近更新 更多