time 
设为首页】【收藏本站
当前位置: 主页 > 电脑网络 > 操作系统 > 嵌入式 > Android > Android应用开发入门(五十七)加载大分辨率图片到内存示例

Android应用开发入门(五十七)加载大分辨率图片到内存示例

时间:2013-11-21 17:28 点击:1767次 字体:[ ]




前言

  在使用ImageView显示图片的时候,直接加载一个图片资源到内存中,经常会出现内存溢出的错误,这是因为有些图片的分辨率比较高,把它直接加载到内存中之后,会导致堆内存溢出的问题。本文就来讲解一下Android的堆内存以及如何在Android应用中加载一个高分辨率的图片。关于ImageView不熟悉的朋友,可以看看之前的:http://www.fengfly.com/plus/view-213384-1.html

  本文的主要内容:

  1. 还原堆内存溢出的错误
  2. 分析堆内存溢出
  3. 如何加载大分辨率图片
  4. 示例Demo

 

还原堆内存溢出的错误

  首先来还原一下堆内存溢出的错误。首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片。应用的布局很简单,一个Button一个ImageView,然后按照常规的方式,使用BitmapFactory加载一张照片并使用一个ImageView展示。

  代码如下:

  1. btn_loadimage.setOnClickListener(new View.OnClickListener() {  
  2.               
  3.             @Override 
  4.             public void onClick(View v) {  
  5.                 Bitmap bitmap=BitmapFactory.decodeFile("/sdcard/a.jpg");  
  6.                 iv_bigimage.setImageBitmap(bitmap);  
  7.             }  

  当点击按钮后,程序会报错,查看日志为:

Android应用开发入门(五十七)加载大分辨率图片到内存示例_www.fengfly.com

  先来分析一下这个错误,首先dalvikvm(Android虚拟机)发现需要的内存38MB大于应用的堆内存24MB,这个时候尝试使用软加载的方式加载数据,我们知道当内存不足的时候dalvikvm会自动进行GC(Garbage Collection),大概清理了55k的空间出来,耗时203毫秒,但是内存还是不够,所以最后发生堆内存溢出的错误。



本文地址 : http://www.fengfly.com/plus/view-214093-1.html
标签: Android 图片
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: