Android 摄像头意图内存泄漏,无活动结果
我遇到了一个问题,在拍摄完照片后,当你点击“取消”而不是“确定”时,使用意图捕捉图像会导致内存问题。单击“取消”或“返回”时,不会返回ActivityResult。相反,它似乎只是将图像保存在缓存中,然后重新启动相机活动。问题是,在第三张或第四张图片上,它使应用程序崩溃,因为它没有返回活动结果,所以我不知道如何处理内存泄漏 我正在使用此代码来启动当前的意图Android 摄像头意图内存泄漏,无活动结果,android,android-camera-intent,Android,Android Camera Intent,我遇到了一个问题,在拍摄完照片后,当你点击“取消”而不是“确定”时,使用意图捕捉图像会导致内存问题。单击“取消”或“返回”时,不会返回ActivityResult。相反,它似乎只是将图像保存在缓存中,然后重新启动相机活动。问题是,在第三张或第四张图片上,它使应用程序崩溃,因为它没有返回活动结果,所以我不知道如何处理内存泄漏 我正在使用此代码来启动当前的意图 static Uri m_CapturedImageURI; void TakePhoto() { try
static Uri m_CapturedImageURI;
void TakePhoto()
{
try
{
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
m_CapturedImageURI = getContentResolver().insert
(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, m_CapturedImageURI);
startActivityForResult(takePictureIntent, 1);
}
catch (Exception e) { Log.d("Exception:", e.toString()); e.printStackTrace(); }
}
但我也尝试过这段代码,直接从android的开发者部分找到:
即使这样,复制和粘贴也会产生同样的问题,即不返回活动结果,最终在3-4张图片后崩溃
有人能给我指出正确的方向吗?像这样保存图像路径:
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
if(mImageCaptureUri!=null)
savedInstanceState.putString("camera_image", mImageCaptureUri.toString());
super.onSaveInstanceState(savedInstanceState);
}
并从以下位置检索图像路径:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("camera_image")) {
mImageCaptureUri = Uri.parse(savedInstanceState.getString("camera_image"));
}
}
super.onRestoreInstanceState(savedInstanceState);
}
只有当用户转到camera intent并且在他捕获图像时,当用户从camera intent返回时,承载camera intent的活动才会被破坏或重新创建,才会发生此问题 重复问题这不是那个问题的重复。这是关于调整位图大小的。阅读问题,它不会返回活动结果,因此不会收集位图。您需要做的是,当用户在打开相机之前单击相机按钮时,只需检查内存空间并执行相应的操作。问题来自拍照、点击取消、拍照、点击取消,拍照,而不返回呼叫活动。仅当我保持在相机中,拍照,然后取消,然后拍照,然后取消时才会发生。这意味着我不会再回到主持活动了。它似乎需要的是在每张照片之后清除相机的缓冲区。我只是不知道该怎么做。
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("camera_image")) {
mImageCaptureUri = Uri.parse(savedInstanceState.getString("camera_image"));
}
}
super.onRestoreInstanceState(savedInstanceState);
}