Как статический внутренний класс со слабой ссылкой на внешний класс может избежать утечек памяти в Android?Нужен пример - PullRequest
5 голосов
/ 23 декабря 2011

Я изучал эту статью, Избегайте утечек памяти . Есть несколько предложений, чтобы избежать утечек памяти, одно из них ниже:

Избегайте нестатических внутренних классов в деятельности, если вы не контролируете их жизненный цикл, использовать статический внутренний класс и сделать слабую ссылку к активности внутри. Решением этой проблемы является использование статического внутренний класс с WeakReference на внешний класс, как это сделано в ViewRoot и его внутренний класс W, например

1- Может ли кто-нибудь это уточнить, приведя пример?

2- Как использовать статические внутренние классы со слабой ссылкой на внутренние классы?

3 - как лучше использовать этот статический класс в вашем приложении для предотвращения утечек памяти.

Большое спасибо.

1 Ответ

1 голос
/ 26 октября 2012

В этом посте ответ показывает простой пример того, что вы ищете: Как создать экземпляр интерфейса во фрагменте?

НО, одна проблема в том, что иногда фрагмент живет дольшечем его активность, например, если у действия есть изменение конфигурации (например, повернуто), то действие уничтожается, но фрагмент можно сохранить живым, а затем снова присоединить к новому (повернутому) действию.См. Этот пост: Жизненный цикл фрагмента Android с изменением ориентации

Таким образом, у вас могут возникнуть проблемы с предлагаемым решением с использованием WeakReference, поскольку после поворота у вас будет ссылка на старое действие (а может и ничего).

Что, кажется, работает для меня:

1) Когда мне требуется ссылка на Activity, вызывайте getActivity ().Можно сделать это прямо в onPostExecute () члена класса AsyncTask, например.

2) Проверить результат на ноль (это может произойти: фрагменты могут жить дольше, чем их действия)

3) Проверьте, является ли активность isFinishing () - вы не хотите делать определенные вещи пользовательского интерфейса в этом состоянии.

4) Приведите активность к вашему типу интерфейса.

5) Обратный вызов в типе интерфейса.

...