2013-09-11 3 views
2

У меня есть Activity. У этого Activity есть ListView с прикрепленным к нему BaseAdapter. В onDestroy адаптер сохраняется в классе, в onCreate он подключен к новому Activity. Адаптер загружает материал из Интернета и создает Views для ListView. Для того, чтобы начать с AsyncTask (для загрузки моих данных) с адаптера, ему нужен LoaderManager. Я передаю его с Activity на адаптер с getSupportLoaderManager() моего Activity.Избегайте долговечных ссылок на мероприятия

  1. Является ли следующее правильно: как адаптер держится и подключить к Activities, он всегда будет содержать ссылку на старый, давно прошли Activity, что я первым перешел к нему, что может/будет приводить к памяти утечки?

  2. Как я могу предотвратить это? Я думал о замене адаптера LoaderManager каждый раз, когда он подключен к новому Activity с новым ActivitygetSupportLoaderManager()? Это безопасно/распространено?

  3. Как я могу найти опасные ссылки на «старые» Activities?

+0

Что означает «хранится в классе»? Вы имеете в виду, что «хранится в статическом элементе данных»? – CommonsWare

+0

Да, вот что я имел в виду. – FWeigl

ответ

1

Избавьтесь от своего статического члена данных. Используйте сохраненный фрагмент, или onRetainNonConfigurationInstance(), чтобы сохранить адаптер при изменении конфигурации.

Как я могу вообще найти опасные ссылки на «старые» мероприятия?

Если под «опасным» подразумевается «утечка», use MAT.

+0

Разве это все еще не протекает, поскольку LoaderManager, который он использует в адаптере, все равно будет ссылаться на уничтоженное действие после изменения ориентации? –

+0

@ Pierre-AntoineLaFayette: фреймворк «Loader» - это средство для жизненного цикла, поэтому, если вы не делаете что-либо, чтобы вызвать утечку активности, изменение конфигурации не должно по своей сути вызывать такую ​​утечку. – CommonsWare

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