2013-07-26 5 views
0

Я разрабатываю приложение с меню, которое содержит список кнопок, когда вы нажимаете одну из этих кнопок, открывается другое действие (одно и то же действие с различным изображением для каждой кнопки), отображающее изображение. Проблема в том, что когда я нажимаю несколько раз на разных кнопках (открывая новые изображения), приложение падает, и я не могу его решить. Любая помощь? Благодарю.Недостаточно памяти imageview

+0

Необходимо, чтобы вы сказали, какая платформа (я так думаю в android, потому что Out Of Memory распространена в android), иногда бывает необходимо добавить исключение, чтобы знать, что такое король Out Of Memory. Я отвечу на ваш вопрос о проблемах с изображениями для Android. –

+0

Да, платформа Android, и исключение, я уверен, что «размер растрового изображения превышает бюджет vm», как Eclipse может показать ошибку при запуске приложения на устройстве, а не в эмуляторе? Проблема заключается в устройстве HTC Desire, а приложение Nexus 4 работает отлично. –

+0

Я отправляю и отвечаю за разрешение самой распространенной ошибки OutOfMemory, но нет вашего конкретного случая, вы можете заглянуть в это другое сообщение здесь, в stackoverflow this (1) http://stackoverflow.com/questions/477572/strange-out-of -memory-issue-while-load-an-image-to-a-bitmap-object/823966 # 823966 или thise (2) http://stackoverflow.com/questions/477572/strange-out-of-memory-issue -while-load-an-image-to-a-bitmap-object В основном проблема заключается в форме при создании растрового изображения. –

ответ

1

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

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

@Override 
    public void unbindDrawables(View view) { 
     if (view.getBackground() != null) { 
      view.getBackground().setCallback(null); 
     } 
     if (view instanceof ViewGroup) { 
      for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
       unbindDrawables(((ViewGroup) view).getChildAt(i)); 
      } 
      ((ViewGroup) view).removeAllViews(); 
     } 
    } 

Этот метод рассматривает вид, в вашем случае эти виды будут вашими ImageView и ImageButton. Наконец, вам нужно вызвать этот метод в методе onDestroy() (нужно также переопределить этот метод).

+0

Хорошо, я попробую и ответю вам. Спасибо;) Gracias –

+0

Здравствуйте, еще раз, можете ли вы объяснить мне, как реализовать метод onDestroy() в его случае и когда он вызывается? –

+0

Я использую объект PhotoviewAttacher этого проекта: https://github.com/chrisbanes/PhotoView/tree/master/sample, и когда я нажимаю кнопку, я создаю новый объект аттрактора Photoview. Ваш код не работает, я не могу переопределить метод unbindDrawables, и я не знаю, почему, но что-то нарушает приложение. –

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