Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用资产或res/raw文件夹时是否存在任何重大差异或限制? 背景_Android_Android Resources_Android Assets - Fatal编程技术网

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

Android 使用资产或res/raw文件夹时是否存在任何重大差异或限制? 背景,android,android-resources,android-assets,Android,Android Resources,Android Assets,应用程序的某些文件只能存储在res/raw或assets文件夹中 这些文件夹中的每一个都以非常相似的方式工作。res/raw文件夹允许更轻松地访问文件,并具有资源文件的所有其他优点,而assets文件夹允许访问文件,无论文件名和结构如何(包括文件夹和子文件夹) 加载文件的主要思想对于这两个方面大致相同。根据您的需要,您可以选择易用性 问题 我记得很久以前,我发现这两个文件夹都有一些特殊的行为: “资产”文件夹中的每个文件夹都有最大数量的文件。我想大约是500,但不确定。我很久以前就注意到这种行为

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

这些文件夹中的每一个都以非常相似的方式工作。res/raw文件夹允许更轻松地访问文件,并具有资源文件的所有其他优点,而assets文件夹允许访问文件,无论文件名和结构如何(包括文件夹和子文件夹)

加载文件的主要思想对于这两个方面大致相同。根据您的需要,您可以选择易用性

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

  • “资产”文件夹中的每个文件夹都有最大数量的文件。我想大约是500,但不确定。我很久以前就注意到这种行为了

  • 有人说资产文件夹中的文件有一个文件的最大大小(例如)。我从未见过这样的限制。当时甚至在安卓2.3上都没有

  • 有人说(例如),即使在今天(例如),人们仍然相信,如果从res/raw加载一个文件,它可能会比从assets文件夹加载文件占用更多内存

  • 我试过的 对于#1,在我完成项目后,我再也不用使用更多的文件,在我完成项目时,我们只是将文件拆分成更多的文件夹

    正如我写的那样,我从来没有注意到这一点。我使用了更大的文件大小

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

    我试着阅读上面的差异和限制,但我发现的都是非常旧的文章,所以我认为事情可能已经改变了

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

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

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

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

  • 如果是的话,它们在哪一个安卓版本上的工作原理大致相同


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

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

    Android文档:

    以原始形式保存的任意文件。打开这些资源 对于原始InputStream,使用 资源ID,即R.raw.filename

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

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

    不,我没有发现内存使用之间有任何差异。这是安卓目前最大的混乱之一,我们也没有任何关于其内存限制的官方文件

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

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

    如果是的话,它们在哪一个Android版本上的工作原理大致相同?


    从android 2.3开始,我们没有任何与内存相关的限制,他们于2010年12月推出了这一功能。但我记得有一个限制,我没有看到任何地方提到过。我必须有大量的文件,由于文件本身的问题,我不得不把它们分成更多的文件夹。2.那么他为什么要花时间去做呢?他甚至在2013年的一篇文章中添加了一个链接(这里:)。在这篇文章中,它是这样写的:“出于某种原因,getResourceAsStream()做了一些非常极端的缓存,如果您使用它,它会占用大量内存”。3.+4. 好啊