2015-10-01 5 views
0

У меня возникла проблема, когда использование намерения захватить изображение вызывает проблемы с памятью, когда вы нажимаете «отменить» вместо «хорошо» после того, как снимок сделан. При нажатии на отмену или обратно он не возвращает 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(); } 
    } 

Но я также попробовал этот код, сразу раздел разработчиков андроида здесь: 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 снимков.

Может ли кто-нибудь указать мне правильное направление?

+0

дублированный вопрос http://stackoverflow.com/questions/32782632/java-lang-outofmemoryerror-failed-to-allocate-a-31961100-byte-allocation-with-1/32783082#32783082 –

+0

Это не дубликат этого вопроса. Это касается изменения размера растрового изображения. Прочитайте вопрос, он не возвращает результат активности и, следовательно, не собирает растровое изображение. – Eidenai

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

Эта проблема возникает, только когда пользователь переходит намерению камеры и к тому времени, когда он захватывает изображение активности, на которой было размещено намерение камеры, уничтожается или воссоздается, когда пользователь возвращается с камеры.

+0

Это происходит только в том случае, если я остаюсь в намерении камеры, сделаю снимок, затем отмените, затем сделайте снимок и отмените. Значение Я не возвращаюсь к активности хозяина. Кажется, что нужно, чтобы буфер камеры очищался после каждого снимка. Я просто не знаю, как это сделать. – Eidenai

Смежные вопросы