關於android相機開發中遇到的內存溢出的問題

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();
		}
	};
相關文章
相關標籤/搜索