使用资产或资源/原始文件夹时是否存在任何重大差异或限制?

时间:2018-01-10 18:37:11

标签: android android-resources android-assets

背景

该应用的某些文件只能存储在res / raw或资源文件夹中。

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

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

问题

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

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

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

  3. 有人说(例如here),即使在今天仍然相信(例如here),如果从res / raw加载文件,它可能需要比如果你从资产文件夹中取出它。

  4. 我尝试了什么

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

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

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

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

    问题

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

    1. 使用资源/原始资源和资源文件夹之间是否有任何重大或独特的限制或差异?

    2. 从资源文件夹中读取文件(通过从中创建输入流)是否真的比使用res / raw占用更少的内存?即便是最受欢迎的开发者之一(here)决定选择它,即使是现在也是如此?

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

    4. 如果是这样,Android版本的工作原理是什么?

1 个答案:

答案 0 :(得分:4)

使用资源/原始资源和资源文件夹之间是否有任何重大或独特的限制或差异?

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

Android文档:

  

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

     

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

从资源文件夹中读取文件(通过从中创建输入流)确实比使用res / raw占用更少的内存吗?即便是最受欢迎的开发者之一(这里)决定选择它,即使是现在也是如此?

不,我没有发现内存使用情况之间存在任何差异。这是Android现在最大的麻烦之一,我们也没有关于其内存限制的任何官方文档。

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

在android 2.3之前,我们对资产文件夹有内存限制,即1 MB。请参阅link

如果是这样,Android版本的工作原理是什么?

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