BitmapFactory时务必要尽快的使用Bitmap.recycle(); 方法进行内存回收, 在java中,通常都不多有内存回收的说法,但恰恰这里出现这方法,说明这方法的重要性,使用了这方法,就没出现过内存溢出了!!
@Override public void onPictureTaken(byte[] data, Camera camera) { // TODO Handle JPEG image data // 解码一个不可变的位图 从指定的字节数组 cameraBitmap = BitmapFactory.decodeByteArray(data, 0, data.length); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); Date curDate = new Date(System.currentTimeMillis());// 获取当前时间 String filetime = "IMG" + formatter.format(curDate) + ".jpg"; File sdcard = new File(Environment.getExternalStorageDirectory(), "MyCamera"); if (!sdcard.exists()) sdcard.mkdir(); File myCaptureFile = new File(sdcard, filetime); try { BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(myCaptureFile)); // 压缩位图到指定的OutputStream cameraBitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos); // 刷新此缓冲区的输出流 cameraBitmap.recycle(); //务必使用该方法回收内存 bos.flush(); // 关闭此输出流并释放与此流有关的全部系统资源 bos.close(); Toast.makeText(ct, "成功", Toast.LENGTH_LONG).show(); } catch (Exception e) { e.getMessage(); Toast.makeText(ct, "失败", Toast.LENGTH_LONG).show(); } camera.startPreview(); } };