Утечка в моем приложении для Android, что я должен проверить?

1

У меня утечка приложения для Android, что я должен проверить?

Я взглянул на то, чтобы избежать утечек памяти, и добавил некоторые вызовы unbindDrawables() в методах onDestroy() для действий по очистке, но ничего не изменилось. Я также заменяю все вызовы getContext() методом getApplicationContext(), но ничего не изменилось.

Я отслеживаю размер кучи в перспективе затмения DDMS: когда я запускаю приложение в первый раз, там выделено 3 Мб, а после 10 закрытия/перезапуска его выделяется 10 Мб.

Мои взгляды состоят в основном из ViewFlippers и многих вложенных макетов, которые наследуются от подкласса LinearLayout.

РЕДАКТИРОВАТЬ:

после запуска MAT для идентификации подозреваемых в утечке основная проблема:

16 instances of "org.apache.http.impl.conn.tsccm.ConnPoolByRoute", 
loaded by "<system class loader>" occupy 4,000,328 (44.08%) bytes.
Теги:
memory-leaks
android-layout

1 ответ

1
Лучший ответ

Если вы используете getApplicationContext() повсюду, то наверняка вы пропустите память! Это вообще плохая идея. Вы должны использовать надлежащий контекст в нужном месте.

Возьмите кучу кучи, используйте профилировщик (например, MAT или jhat) и посмотрите на экземпляры, которые не должны быть там (действия, которые должны были быть уничтожены). Следуйте цепочке ссылок назад и выясните, почему они не возвращаются.

  • 0
    ну что это значит? «Попробуйте использовать контекстное приложение вместо контекстной активности»
  • 0
    Если вы используете контекст приложения, где вы должны использовать контекст действия, то вы потеряете память, потому что контекст приложения должен использоваться только для «долгоживущих» объектов. Нет правила, которое гласит: «Если вы используете контекст приложения, вы не потеряете память»
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню