• 关于Raw,Assets的使用


    Raw,Assets下文件区别:

    相同点:两个目录下的文件在打包后都会原封不动的保存到apk中,不会被编译成二进制。

    不同点:Raw下文件不能使用目录结构, 有些格式的会被压缩,能够通过R.raw方便的取得, Assets可以使用目录结构,访问比较慢。

    • 由于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适的。
    • assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。

    在Android 2.3以前的任何压缩的资源的原始大小超过1M将不能从APK中读出,如果你使用AssetManager 或 Resources classes方法来获取InputStream,将抛出java.io.IOException的异常如下     DEBUG/asset(1123): Data exceeds UNCOMPRESS_DATA_MAX (20078432 vs 1048576);

    /* these formats are already compressed, or don't compress well */
      static const char* kNoCompressExt[] = {
      ".jpg", ".jpeg", ".png", ".gif",
      ".wav", ".mp2", ".mp3", ".ogg", ".aac",
      ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet",
      ".rtttl", ".imy", ".xmf", ".mp4", ".m4a",
      ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2",
      ".amr", ".awb", ".wma", ".wmv"
      };

    使用大于1m问价,解决方法如下:

    1.将你的资源文件后缀改成上面列出的后缀。
    2.在命令行上使用-0参数来指定不需要压缩的文件后缀。当你使用Eclipse内的ADT目前还不知道有什么方法可以传递-0参数给aapt。
    3.将你的资源文件分割成UNCOMPRESS_DATA_MAX(1M)以下的文件.

    使用方法:

    raw:

      InputStream is = getResources().openRawResource(R.id.filename); 

    assets:

      AssetManager am =  getAssets();
      InputStream is = am.open("filename");

  • 相关阅读:
    ClickHouse副本机制简介
    【使用分享】Hive分区表那些事
    华为云CDN如何提高缓存命中率
    [导入]dtc 与 iis 的关系
    npm启动项目出现gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer错误信息的解决方案
    【做题记录】Atcoder 做题记录
    【做题记录】CodeForces 做题记录
    【考试总结】20220519
    AGC056B Range Argmax
    THUSC2022游记
  • 原文地址:https://www.cnblogs.com/pandans/p/3412090.html
Copyright © 2020-2023  润新知