我正处于Android世界的学习阶段,我刚刚介绍了资产和原始资源。我试图了解使用原始资源与资产的原因。
它们都提供了未编译的资源输入流。
似乎资产提供了比原始资源更多的灵活性和功能。
一个。您可以在Assets下创建文件夹结构,而不是在Raw
下创建湾您可以在assets文件夹中动态列出所有资源,而不是在Raw文件夹中。
那么,为什么我会在Android中使用Raw资源?
答案 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。