Android拍照后Bitmap内存溢出的解决办法

来源:互联网 发布:当下网络灰色收入 编辑:程序博客网 时间:2024/05/20 19:45
在安卓中拍照显示图片到指定的ImageView时候经常会使用Bitmap,但是Bitmap如果不及时回收会导致内存溢出的问题,所以在适合的时机回收bitmap很重要。否则拍了几张照片之后就会导致程序崩溃而欲哭无泪了。
package com.example.Utils;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.graphics.Bitmap;import android.net.Uri;import android.os.Environment;public class SaveImage {private Bitmap bitmap;private String FileName;private String StorageDirectoryName;//安检图片路径private String imagePath;public SaveImage(Bitmap bitmap, String fileName, String storageDirectoryName) {this.bitmap = bitmap;FileName = fileName;StorageDirectoryName = storageDirectoryName;File tmpDir = new File(Environment.getExternalStorageDirectory()+ "/"+StorageDirectoryName);if (!tmpDir.exists()) {tmpDir.mkdir();}String photo_name1 = FileName + System.currentTimeMillis() + ".png";imagePath = tmpDir.getAbsolutePath() + "/" + photo_name1;}public String getImagePath(){return  imagePath;}public Uri SaveBitmap() {File img = new File(imagePath);try {FileOutputStream fos = new FileOutputStream(img);bitmap.compress(Bitmap.CompressFormat.PNG, 85, fos);fos.flush();fos.close();return Uri.fromFile(img);} catch (FileNotFoundException e) {e.printStackTrace();return null;} catch (IOException e) {e.printStackTrace();return null;}finally{bitmap.recycle();}}}
上面这段程序就是拍照之后将图片保存到指定的文件目录下,<span style="font-family: Arial, Helvetica, sans-serif;">StorageDirectoryName为文件根目录,</span><span style="font-family: Arial, Helvetica, sans-serif;">FileName为图片名称,将拍的的照片保存起来便于以后操作。</span>
<span style="font-family: Arial, Helvetica, sans-serif;">SaveBitmap方法之后返回图片的URI,最后调用</span>
<span style="font-family: Arial, Helvetica, sans-serif;">f</span><span style="font-family: Arial, Helvetica, sans-serif;">inally{</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"></span>bitmap.recycle();<span style="white-space:pre"></span>}</span>
<span style="font-family: Arial, Helvetica, sans-serif;">将bitmap回收,这样无论拍多少次都不会导致bitmap的内存溢出问题。然后imageview.setImageUri方法就可以设置拍下来的图片了。</span>

0 0
原创粉丝点击