/ / W jaki sposób zadania asynchroniczne i kursory prowadzą do wycieku pamięci? - Android

Jak zadania asynchroniczne i kursory prowadzą do wycieku pamięci? - Android

Chciałbym lepiej zrozumieć to samo, w jaki sposób zadanie asynchroniczne dotyczące zmian orientacji może prowadzić do wycieku pamięci. Przeprowadziłem trochę badań, ale nie mogłem znaleźć dokładnego rozwiązania

Odpowiedzi:

0 dla odpowiedzi № 1

Zwykle, gdy zmienia się orientacja, system Android niszczy aktywność (śmieci zbierają przydzieloną pamięć) i tworzy nową.

Teraz powiedz, że prowadzisz AsyncTask który zawiera odniesienie do Activity obiekt klasy i zmiany orientacji. W tym przypadku system Android nie byłby w stanie zniszczyć tej aktywności (ponieważ nadal jest do niej odwoływana AsyncTask), podczas gdy na jego miejscu powstanie nowy. Jest to jeden ze sposobów wycieków pamięci.


0 dla odpowiedzi nr 2

Kiedy tworzysz instancję AsyncTask, typrzekazać odwołanie do działania w nim za pomocą „this” lub kontekstu. Jeśli obrócisz urządzenie, gdy działa asyncTask, aktywność zostanie odtworzona, a poprzednie wystąpienie będzie nadal dostępne dla AsyncTask, co powoduje wyciek pamięci.

Najlepszą praktyką jest sprawdzenie yourActivity.this.isFinishing () w postExecute i nie aktualizowanie interfejsu użytkownika. Możesz anulować asyncTask za pomocą metody cancel ().