相机意图内存泄漏,无活动结果

时间:2015-10-01 12:56:35

标签: android android-camera-intent

我遇到了一个问题,当您点击“取消”时,使用意图捕获图像会导致内存问题。而不是'好的'照片拍完后。点击取消或返回时不会返回ActivityResult。相反,它似乎只是将图像保存在缓存中,并重新启动相机活动。问题是,在第三张或第四张图片上,它崩溃了应用程序,因为它没有返回活动结果,我不知道如何处理内存泄漏。

我目前正在使用此代码启动目标。

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的开发人员部分:http://developer.android.com/training/camera/photobasics.html

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

即便如此,复制和粘贴也会产生相同的问题,即不返回活动结果,最终会在3-4张照片后崩溃。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

保存图像路径:

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

发生此问题时,仅当用户转到相机意图时,并且当他捕获图像时,托管相机意图的活动在用户从相机意图返回时被破坏或重新创建。