2013-02-21 6 views
0

Я пытаюсь установить изображение в изображение в пользовательском диалоговом окне с возможностью рисования. У меня есть следующий методЛучший способ обработки OOME android

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
     this.setCancelable(false); 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     ViewGroup vg = (ViewGroup)inflater.inflate(R.layout.popup, null); 
     image= (ImageView) vg.findViewById(R.id.image); 
     Uri uri = Uri.parse("android.resource://"+this.getActivity().getPackageName()+"/drawable/p1"); 
     image.setImageURI(uri); 
. 
. 
return builder.create(); 
} 

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

Я знаю, что это происходит из-за этого

image.setImageURI(uri); 

Что это лучший способ, чтобы избавиться от этой проблемы ??

UPDATE ::

I tried to recycle the bitmap by using this 

Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap(); 
     if(!bitmap.isRecycled()){ 
     bitmap.recycle(); 
     bitmap =null; 
     } 

Теперь если я получаю dialong с одного изображения последовательно у меня есть эта ошибка:

Canvas trying to use a recycled bitmap Runtime Exception. 

Любая помощь ценится

ответ

0

Самый лучший способ смотреть сколько памяти использует приложение и где она его использует. Вероятно, вы где-то просачиваетесь. Если нет, выясните, как уменьшить общее использование памяти. Eclipse может использовать для вас кучи использования кучи.

+0

Не могли бы вы сказать мне, если я хочу, чтобы масштабировать и применить изображение в диалоге эффективно ?? или указать мне на какой-то ресурс? Диалог вызывается многократно, и я не использую никаких статических переменных на экране для утечки контекста. Он просто выводит изображение, и этот OOME не всегда бывает. Редко –

+0

Не обязательно этот диалог вызывает эту проблему. Это означает, что общее использование памяти вашим приложением слишком велико. Здесь просто не получилось. Вы не можете смотреть это диалоговое окно отдельно, вам нужно посмотреть на все использование памяти в приложении. –

+0

Ну, пользовательский интерфейс активности - это кнопка и текстовое изображение, и вы получаете всплывающее окно. Изображение с рисующего изображения - 1280x720. Поэтому я думаю, что это вызывает ошибку. Но размер изображения составляет 150 кБ. Я уже достаточно расстроен с отладкой. Я очень ценю ваше терпение, отвечая на меня. –

0

Анализатор памяти Eclipse (http://www.eclipse.org/mat/) может помочь вам обнаружить утечку в сочетании с DDMS и анализатором кучи.

Чтобы начать обновление кучи, вы можете переключиться на вид DDMS из Eclipse, и там вы выберете процесс, соответствующий вашему приложению, а затем вы выберете кнопку «Показать обновления кучи». Затем каждый раз, когда вы нажимаете кнопку «Причина GC», вы увидите обновление объектов в своей куче.

Чтобы проанализировать это с помощью Eclipse, вы можете щелкнуть «Dump HPROF file», чтобы загрузить его с помощью анализатора памяти Eclipse, который даст вам больше намеков на то, что может протекать.

Этот блог на блоге разработчиков Android идет в гораздо более подробно: http://android-developers.blogspot.ca/2011/03/memory-analysis-for-android.html

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