我应该何时使用资产而不是Android中的原始资源?

时间:2012-03-05 08:02:26

标签: android android-resources android-assets

我正处于Android世界的学习阶段,我刚刚介绍了资产和原始资源。我试图了解使用原始资源与资产的原因。

  1. 它们都提供了未编译的资源输入流。

  2. 似乎资产提供了比原始资源更多的灵活性和功能。

    一个。您可以在Assets下创建文件夹结构,而不是在Raw

    下创建

    湾您可以在assets文件夹中动态列出所有资源,而不是在Raw文件夹中。

  3. 那么,为什么我会在Android中使用Raw资源?

3 个答案:

答案 0 :(得分:170)

raw文件夹和Assets文件夹之间的主要区别。

  • 由于raw是Resources(res)的子文件夹,Android会 自动为其中的任何文件生成ID。这个 然后ID存储R class作为参考 一个文件,这意味着它可以从其他Android类轻松访问 和方法,甚至在Android XML文件中。自动使用 生成的ID是访问Android中文件的最快方式。

  • Assets文件夹是“附录”目录。 R类确实如此 不为其中放置的文件生成ID ,因此其兼容性较差 一些Android类和方法。而且,它要慢得多 访问其中的文件,因为您需要获取它的句柄 基于字符串。但是,有些操作更容易完成 将文件放在此文件夹中,如将数据库文件复制到 系统的记忆。没有(简单)方法来创建Android XML 引用Assets文件夹中的文件。

答案 1 :(得分:24)

Android documentation开始, raw/ 目录用于:

  

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

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

在一行中,raw/目录中的文件为not compiled by the platform分配了资源ID 无法分组到子文件夹如果你想要,否则使用assets/目录。

答案 2 :(得分:0)

添加到上面给出的答案...

/ res / strings,/ res / layout,/ res / xml文件等都被编译成二进制格式。但是,如果您将包括XML文件在内的文件放在/ res / raw /目录中,则它们不会被编译成二进制格式。

  

与原始资源相比,使用资产的一大优势是   file:///android_asset/ Uri 前缀。这对于加载   资产放入WebView。例如,用于访问位于   在项目中的assets / foo / index.html中,您可以调用   loadUrl("file:///android_asset/foo/index.html")加载该HTML   进入WebView。