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 № 1Zwykle, 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 ().