5

Я изучал эту статью, Avoid Memory Leaks. Есть несколько советов, чтобы избежать утечек памяти, один из них ниже:Как статический внутренний класс с WeakReference для внешнего класса может избежать утечек памяти Android? Нужен пример

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

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

2 Как использовать для статических внутренних классов с слабыми ссылками на внутренние классы?

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

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

+0

Вы видели это: http://stackoverflow.com/questions/5002350/android-weak-reference-of-inner-class? – davogotland

+0

Спасибо. да, я видел это, но мне все еще нужен простой пример с объяснением. –

ответ

1

В этом посте, ответ показан простой пример того, что вы ищете: How to instantiate interface in fragment?

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

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

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

1) Когда мне нужно реф на операцию, вызовите getActivity(). Это можно сделать прямо в onPostExecute() класса AsyncTask, например.

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

3) Проверьте, если активность isFinishing() - вы не хотите, чтобы делать определенные вещи UI в этом состоянии ,

4) Деятельность, передаваемая вашему типу интерфейса.

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