2011-12-23 12 views
5

Studiowałem ten artykuł, Avoid Memory Leaks. Istnieje kilka wskazówek, aby uniknąć wycieków pamięci, jeden z nich jest poniżej:W jaki sposób statyczna klasa wewnętrzna z WeakReference do klasy zewnętrznej może uniknąć wycieków pamięci Android? Potrzebuję przykładu

unikać non-statyczne klasy wewnętrzne działalność, jeśli nie kontrolować ich cyklu życia, używać statycznego klasę wewnętrzną i zrobić słaby odniesienie do działania w środku. Rozwiązaniem tego problemu jest użycie statycznego wewnętrzną klasę z WeakReference do zewnętrznej klasy, jak to zrobiono w ViewRoot i jego W klasie wewnętrznej na przykład

1- Może ktoś rozwinąć ten dając przykład ?

2- Jak używać do klas statycznych ze słabym odnośnikiem do klas wewnętrznych?

3- jakie są najlepsze praktyki stosowania tej klasy statycznej w aplikacji, aby uniknąć wycieków pamięci.

Wielkie dzięki.

+0

Widziałeś to: http://stackoverflow.com/questions/5002350/android-weak-reference-of-inner-class? – davogotland

+0

Dzięki. tak, widziałem to, ale nadal potrzebuję prostego przykładu z wytężaniem. –

Odpowiedz

1

W tym poście odpowiedź pokazuje prosty przykład tego, co szukasz: How to instantiate interface in fragment?

ALE jeden problem jest to, że czasami fragment żyje dłużej niż jego działalności, na przykład, gdy działalność ta ma zmiana konfiguracji (np. obrócona), a następnie Aktywność zostaje zniszczona, ale Fragment może pozostać przy życiu, a następnie ponownie dołączyć do nowej (obróconej) Aktywności. Zobacz ten post: Android Fragment lifecycle over orientation changes

Możesz mieć problem z proponowanym rozwiązaniem za pomocą WeakReference, ponieważ po obrocie masz odniesienie do starej aktywności (a może nic).

Co wydaje się działać dla mnie:

1) Kiedy muszę ref do aktywności, zadzwoń getActivity(). Można to zrobić na przykład w onPostExecute() klasy AsyncTask członka.

2) Sprawdź wynik dla wartości null (co może się zdarzyć: Fragmenty mogą żyć dłużej niż swoich działaniach)

3) Sprawdź, czy aktywność isFinishing() - nie chcesz, aby zrobić pewne rzeczy UI w tym stanie .

4) Prześlij aktywność do typu interfejsu.

5) Wywołanie zwrotne połączenia w typie interfejsu.

Powiązane problemy