Android 项目中资源文件 -- asset 目录和 re

2020-06-10  本文已影响0人  __Witness
无图你说个丁丁资源

为了引出了本片文章的主题,我专门去找了一张资源图片

都说“巧妇难为无米之炊”,不错的,对于我们做Android开发的筒靴们是一样的,要想页面效果搞的花里胡哨的,那你不得给我们一点资源(一张图片,一个视频,一段音频,一个字体文件,一个html文件)。有时候这些资源比较固定不更换的,我们往往会把它直接放在整个项目中,然后打包进apk,程序运行的时候就直接可以使用了。

assets目录 res目录

在Android中,我们常常提到资源文件一般只要分为两种:

assets文件和res文件

assets目录 res/raw目录

先说说raw目录吧。它是创建在res文件下的一个资源文件(常见的会放一些视频/音频文件等等)。它虽然是res的子目录但是它里面的文件在打包生成apk的时候不会像其他res文件一样,对资源文件进行压缩,这一点和assets文件相似。

下面就再说一下assets目录 和 res/raw目录的异同

相同点

assets和res/raw工程目录下都可以放一些小于1M的文件(2.3版本以前的要求,现在无限制)两个文件夹下的文件都会被原封不动的打包到APK中应用使用。而不会像其它资源文件那样被编译成二进制的形式。(不管放在哪个文件夹下apk的大小是不变的)

不同点

Since raw is a subfolder of Resources (res), Android will >automatically generate an ID for any file located inside it. This ID >is then stored an the R class that will act as a reference to a file, >meaning it can be easily accessed from other Android classes >and methods and even in Android XML files. Using the >automatically generated ID is the fastest way to have access to >a file in Android.

The Assets folder is an “appendix” directory. The R class does not generate IDs for the files placed there, so its less compatible with some Android classes and methods. Also, it’s much slower to access a file inside it, since you will need to get a handle to it based on a String. However some operations are more easily done by placing files in this folder, like copying a database file to the system’s memory. There’s no (easy) way to create an Android XML reference to files inside the Assets folder.

raw是res的子目录,Android会自动的为这个目录中的所有资源文件生成一个ID并映射到R.java文件中,作为一个文件的引用。这样我们就可以很容易的访问到它了,在Android XML文件中可以用@raw/xxx的形式引用。mp3,mp4等文件适合放在这个目录下。
assets文件更像是一个附录类型的目录,Android不会为这个目录中的资源文件创建ID。同时,访问的时候需要一个字符串路径来获取这个目录下的文件描述,所以访问的速度会更慢。而且我们只能通过AssetManager这个统一管理类来访问这些文件。数据库、字体文件、json文件、html文件适合放在这里。

上一篇下一篇

猜你喜欢

热点阅读