2016-04-07 3 views
0

Я единственный разработчик приложения для компании, в которой я работаю. Я новичок в разработке приложений, и я почти закончил приложение, но когда я тестировал, я заметил, что размер кучи растет при навигации до 3х стартовой суммы до тех пор, пока GC не запустится и не отбросит ее. Я запустил MAT и увидел, что это должно быть что-то с растровыми изображениями. В настоящее время я меняю значки на состояние «on» каждый раз, когда они касаются. Это означает, что я просто изменил значки на другое цветное изображение, чтобы придать визуальный вид «постукиванию», например, ниже.Android ImageViews, вызывающий утечку памяти?

ImageView callButton = (ImageView) findViewById(R.id.callButton); 
    callButton.setImageResource(R.drawable.call_on); 

Затем они отключены от onResume, например, ниже.

ImageView callButton = (ImageView) findViewById(R.id.callButton); 
    callButton.setImageResource(R.drawable.call_off); 

Я делаю это для каждого значка в приложении. Мой вопрос заключается в том, приводит ли это к утечке памяти из создания так много ImageViews. Должен ли я установить их на null onDestory?

+0

использовать фреску или скольжение вместо изображения. –

+0

@quicklearner - это совершенно нечувственная идея, основанная на том, как он их использует. –

ответ

0

Нет, вам не нужно устанавливать растровые изображения в нуль onDestroy. Особенно если вы используете изображения из ресурсов, ссылки на которые хранятся в Resources в любом случае. То, что вы можете рассмотреть, это использовать StateDrawable и изменять состояние, а не переключать drawable все время, только для вашего собственного здравомыслия. Но такое использование не должно вызывать OOM, если у вас много изображений или других проблем.

+0

Я реализовал StateListDrawables, которые очень полезны и помогают, но я заметил, что каждый раз, когда я нажимаю на spinner, он использует около .1 МБ и вырастает куча. Будет ли причина для этого? – user1715916

0

Отпустите растровые изображения как можно быстрее, используя setImageDrawable(null) как -

callButton.setImageDrawable(null);