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(); } };