使用资产或res/raw文件夹时是否存在重大差异或限制?

and*_*per 11 android android-assets android-resources

背景

该应用程序的某些文件只能存储在res/raw或assets文件夹中.

每个文件夹的工作方式与另一个文件夹的工作方式非常相似.res/raw文件夹允许更容易地访问文件,具有资源文件的所有其他好处,而资产文件夹允许访问它们,无论文件名和结构如何(包括文件夹和子文件夹).

加载文件的主要思想对于它们来说大致相同.您可以选择易用性,具体取决于您的需求.

问题

我记得很久以前,我发现这两个文件夹都有一些特殊的行为:

  1. assets文件夹中的每个文件夹都有最大数量的文件.我认为它大概是500,但不确定.我很久以前就注意到了这种行为,

  2. 有人说资产文件夹中的文件具有文件的最大大小(例如此处).我从未见过这样的限制.当时甚至不在Android 2.3上.

  3. 有人说(这里的例子),即使在今天(例如这里)仍然相信,如果从res/raw加载文件,它可能比从assets文件夹中获取文件需要更多的内存.

我试过的

对于#1,在我工作的项目之后,我从来没有使用过更多的文件,在我工作的时候,我们只是将文件拆分成更多的文件夹.

对于#2,正如我写的那样,我从来没有注意到它.我使用了更大的文件大小.

对于#3,我尝试制作一个示例项目,比较两种方法之间的内存使用情况.我没有注意到两种方法之间的任何差异(内存使用或加载时间).特别是不是主要的.可悲的是,我只有一个设备(Nexus 5x),它有一个新的Android版本(8.1).可能是从特定的Android版本开始,两种方法之间没有区别.这样做的另一个原因是,由于GC,测量Java上的内存使用量更难,而且我已经注意到在Android 8.x上,内存的工作方式与之前有所不同(在此处写).

我试着读一下上面的差异和限制,但我发现的都是非常古老的文章,所以我认为事情可能从此改变过.

问题

实际上这只是一个问题,但我想分开它,以防答案很复杂:

  1. 使用res/raw和assets文件夹之间是否存在任何主要或唯一的限制或差异?

  2. 从assets文件夹中读取文件(通过从中创建输入流)确实比使用res/raw占用更少的内存吗?即使是现在,即使是最受赞赏的开发商之一(这里)也决定选择它?

  3. 上述限制是否存在于特定的Android版本中,然后它们在没有任何限制方面变得相同(当然文件命名为res/raw,但这只是它的工作方式)?

  4. 如果是这样,他们从哪个Android版本开始工作呢?

jit*_*555 4

使用 res/raw 和 asset 文件夹之间是否存在任何主要或独特的限制或差异?

现在,在 Android 中,我们对资源或原始文件中的任何文件的最大大小限制没有任何限制。

安卓文档:

以原始形式保存的任意文件。要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()。

但是,如果您需要访问原始文件名和文件层次结构,您可以考虑将一些资源保存在 asset/ 目录(而不是 res/raw/)中。asset/ 中的文件没有资源 ID,因此您只能使用 AssetManager 读取它们。

从资产文件夹中读取文件(通过从中创建输入流)真的比使用 res/raw 占用更少的内存吗?以至于即使是最受赞赏的开发人员之一(此处)也决定选择它,即使是在今天?

不,我没有发现内存使用情况有任何差异。这是 Android 目前遇到的最大的混乱之一,而且我们没有任何关于其内存限制的官方文档。

上述限制是否存在于特定的 Android 版本中,然后它们在没有任何限制方面变得相同(当然除了 res/raw 的文件命名,但这就是它的工作原理)?

在 android 2.3 之前,我们对 asset 文件夹有内存限制,即 1 MB。请参考链接

如果是这样,从哪个 Android 版本开始它们的工作原理大致相同?

从android 2.3开始,我们没有任何与内存相关的限制,他们于2010年12月推出