zoukankan      html  css  js  c++  java
  • 【android】android 开发错误点滴积累5月Asset资源管理

    1.上手机时INSTALL_FAILED_INSUFFICIENT_STORAGE 错误提示

    主要原因还是asset文件夹里面的东西太大导致的,开始自己放了几个字体在里面,其中有一个5M大的 安装的时候就悲剧了,删除后问题解决。

    如果是模拟器爆这个错误,可以添加参数:-partition-size 1024

    在网络上查了下关于这个问题的深入原因:

      “在使用Android自带的Res\raw或使用Asset时都需要经过Asset Manager,这将会产生一个比较严重的问题,在Android模拟器测试时不存在问题,但放到真机G1时会面临多个问题,经过查看 UNCOMPRESS_DATA_MAX的取值为1048576字节,除以1024不难发现是1MB。也就是说Android手机在处理资源文件时不能大 于1mb的体积”

      目前解决的方法只有将文件放入到sdcard,但这样除了microsd的读取IO效率和耗电量解决不是很好,同时sd卡移除时可能存在问题,解决的方法 如果数据量大的化通过sqlite是一种解决方法,同时openFileOutput方式读取也是不错的选择,看来android操作系统中最安全控制的 严格,但犯了一个不小的错误。

         

    这里涉及到asset文件夹和raw文件夹的一点知识:

    *res/raw和assets的相同点:

    1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。


    *res/raw和assets的不同点:
    1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
    2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

    *读取文件资源:

    1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

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

    2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作

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

    补充一下:在未知目录下有哪些文件,该去和获取这些文件的名称并把文件拷贝到目标目录中呢?(用于内置文件但不知道文件名称,需要筛选出想要的文件然后拷贝到目标目录中,推荐内置在assets文件夹中)
    1.res/raw目录:
    通过反射的方式得到R.java里面raw内部类里面所有的资源ID的名称,然后通过名称获取资源ID的值来读取我们想要的文件。
    2.assets目录:
    getAssets().list("");来获取assets目录下所有文件夹和文件的名称,再通过这些名称再读取我们想要的文件。

  • 相关阅读:
    app测试更多机型系统解决方法
    Dsyy的第一篇博文~
    linux服务器下安装node
    android UI进阶之实现listview的下拉加载
    android应用开发全程实录用户界面部分章节你真的会用最简单的TextView么?
    android应用开发全程实录你有多熟悉listview?
    android应用开发全程实录实现甩动拨打和挂断电话
    android应用开发全程实录关于google map的部分章节漂亮的气泡地图
    android UI进阶之用ViewPager实现欢迎引导页面
    android UI进阶之实现listview中checkbox的多选与记录
  • 原文地址:https://www.cnblogs.com/rywx/p/2078717.html
Copyright © 2011-2022 走看看