【安卓笔记】res/raw与assets区别

相同点:
1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
2.assets目录下可以新建目录,而res/raw目录则不可以。
不同点:
1.由于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以以@raw/形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适的。
2.assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。
使用:
比如给ImageView设置一张图片
res/raw:
假设图片路径:res/raw/demo.jpg
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.raw.demo);
            iv_show.setImageBitmap(bitmap);
            bitmap = null;
或者:
InputStream is = this.getResources().openRawResource(R.raw.demo);
            Bitmap image = BitmapFactory.decodeStream(is);
            iv_show.setImageBitmap(image);
            image = null;
assets:
假设图片路径:assets/image/image.jpg
AssetManager manager = this.getAssets();
            try
            {
                InputStream in = manager.open("image/image.jpg");//注意路径
                Bitmap bitmap = BitmapFactory.decodeStream(in);
                iv_show.setImageBitmap(bitmap);
                bitmap = null;
                System.gc();
            } catch (IOException e)
            {
                e.printStackTrace();
            }



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。