当前位置:编程学习 > wap >>

从assets中加载多个图片出错,求高人解决,急!


public static Bitmap getImageFromAssetsFile(Resources res,String fileName)  
  {  
      Bitmap image = null;  
      AssetManager am = res.getAssets();  
      InputStream is = null;  
      try  
      {  
       is=am.open(fileName);
          image = BitmapFactory.decodeStream(is);  
      }  
      catch (IOException e)  
      {  
          e.printStackTrace();  
      } finally{
       if(is!=null){
       try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}  
       }
      } 
      return image;  
  }  



这是我加载图片的代码。
我一次加载了几十张图片,就报

01-04 01:50:12.964: ERROR/AndroidRuntime(325): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

网上搜了很多方法都得不到解决。

求解决办法或思路。
求优化办法或思路。 --------------------编程问答-------------------- wow,我还是回去再学学吧 --------------------编程问答-------------------- 图片资源用完回收掉吧  bmp.recycle() --------------------编程问答-------------------- 加载少量的图片没问题。图片量大了就报错了。 --------------------编程问答-------------------- 这个问题是所有做android app都会碰到而且必须学会解决的问题 网上很多 自己找找吧 oom --------------------编程问答--------------------
引用 4 楼 wensefu 的回复:
这个问题是所有做android app都会碰到而且必须学会解决的问题 网上很多 自己找找吧 oom


呃。。。
能给点提示不? --------------------编程问答-------------------- 资源管理,你只加载不清除,再多的内存也被你用光啊,你用到的时候加载进来,用完就recycle()掉。 --------------------编程问答--------------------  内存溢出。 
   超过8M就会报错 --------------------编程问答--------------------
引用 6 楼 hswujingjing 的回复:
资源管理,你只加载不清除,再多的内存也被你用光啊,你用到的时候加载进来,用完就recycle()掉。

gc回收吗?还是别的? --------------------编程问答-------------------- 2L说的正确的呀。。LZ不明白? --------------------编程问答-------------------- 这个问题都不知道说了多少遍了,其实还是需要具体情况具体分析。
LZ Google一下java.lang.OutOfMemoryError,会收获很多,还是要自己实践的。 --------------------编程问答-------------------- 应该是没有释放资源导致的内存不足,:-) --------------------编程问答-------------------- 我也加载不少,没报错,你加载的数量和大小是多少? --------------------编程问答--------------------

private void dispalyNextImage() {
// 如果发生数组越界
if (currentImg >= images.length) {
currentImg = 0;
}
//备注1
// 找到下一个图片文件
while (!images[currentImg].endsWith(".png")
&& !images[currentImg].endsWith(".jpg")
&& !images[currentImg].endsWith(".gif")) {
currentImg++;
// 如果已发生数组越界
if (currentImg >= images.length) {
currentImg = 0;
}
}

InputStream assetFile = null;
try {
// 打开指定资源对应的输入流
assetFile = assets.open(images[currentImg++]);
} catch (IOException e) {
e.printStackTrace();
}

BitmapDrawable bitmapDrawable = (BitmapDrawable) image.getDrawable();
//备注2
// 如果图片还未回收,先强制回收该图片
if (bitmapDrawable != null && !bitmapDrawable.getBitmap().isRecycled()){
bitmapDrawable.getBitmap().recycle();
}
// 改变ImageView显示的图片
image.setImageBitmap(BitmapFactory.decodeStream(assetFile));
}
}

提供代码吧,更直接一些!!
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,