【android】android 开发错误点滴积累5月--Asset资源管理
2011-06-12 09:19
267 查看
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目录下所有文件夹和文件的名称,再通过这些名称再读取我们想要的文件。
主要原因还是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目录下所有文件夹和文件的名称,再通过这些名称再读取我们想要的文件。
相关文章推荐
- 【android】android 开发错误点滴积累5月--Asset资源管理
- android 开发错误点滴积累--Asset资源管理
- android 开发错误点滴积累--Asset资源管理
- android 开发错误点滴积累--Asset资源管理
- Android开发点滴积累
- AS开发点滴(一)关于Android Studio无法创建Android项目的错误
- Android ROM开发(二)——ROM架构以及Updater-Script脚本分析,常见的Status错误解决的方法
- Android 开发中的日常积累
- Android 开发中的日常积累
- Android 下arcgis开发学习第二天--扫清常见错误
- android native开发 错误信息定位:Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4785 (XXX)
- 【android 开发知识积累】——属性(Attribute)资源的使用和自定义View组件
- 论述Android开发新手常犯的10大错误
- android开发常见编程错误总结
- Android开发各类常见错误解决方案【值得收藏】
- 9种常见的Android开发错误及解决方案
- Android开发各类常见错误解决方案
- 求解啊,我在android中开发,写入sd卡的时候出现了错误,测试了能够连接了到本地服务器的文件了,就是写入sd卡的时候不能写入
- android开发之关于提高第三方app的service优先级(以及例举网上常见的错误方法)
- Android开发常见错误