Interfejs API systemu Android dla logiki asynchronicznej, AsyncTask, jest już w przygotowaniu. Zgodnie z zatwierdzeniem AOSP interfejs API będzie przestarzały w systemie Android 11.
Od lat AsyncTask na Androida jest podstawowym narzędziem zarówno dla początkujących, jak i doświadczonych programistów. Jeśli kiedykolwiek korzystałeś z samouczka dotyczącego jakiejkolwiek logiki asynchronicznej w systemie Android, istnieje duże prawdopodobieństwo, że kilka pierwszych wyników sugeruje użycie AsyncTask. To też nie jest tak, że jest to wybór przypadkowy. AsyncTask został pierwotnie stworzony, aby uprościć interakcję między operacjami w tle a interfejsem użytkownika aplikacji. Przez jakiś czas robił to dobrze. AsyncTask naprawdę pomaga uprościć zadania asynchroniczne. Nie oznacza to jednak, że jest idealnie.
Jedną z rzeczy, którą musi zrobić wiele aplikacji, jest pobranie informacji ze zdalnego serwera. Ponieważ żądania sieciowe mogą zająć trochę czasu, zwykle ważne jest, aby wykonywać je asynchronicznie, aby nie powodowały zawieszania się aplikacji. Po zakończeniu operacji interfejs użytkownika można zaktualizować. Możliwe jest jednak, że do czasu zakończenia żądania sieciowego odpowiednia część interfejsu użytkownika już nie istnieje, co może powodować awarie lub inne błędy. Chociaż AsyncTask upraszcza cały proces, nie uwzględnia cyklu życia aplikacji Androida. Oznacza to, że nie ma wbudowanej ochrony przed zakończeniem zadania AsyncTask po zmianie interfejsu użytkownika. Oczywiście możliwe jest ręczne dodanie kontroli i innych zabezpieczeń, ale powoduje to dodanie dużej liczby powtórzeń kodu (płyta standardowa AKA). Z powodu takich problemów AsyncTask w pewnym sensie spadł na dalszy plan. Google również nie wprowadziło wielu zmian w sposobie działania.
Cóż, wygląda na to, że opinia Google jest taka, że AsyncTask nie da się uratować. W niedawnym zatwierdzeniu AOSP AsyncTask został uznany za przestarzały, podając powody podobne do tych, o których właśnie mówiłem. Chociaż nie jest to tak naprawdę wielka zmiana dla użytkowników końcowych, może mieć wiele znaczenia dla programistów. Jeśli utrzymujesz starszą bazę kodu lub dopiero zaczynasz od zadań asynchronicznych w systemie Android, prawdopodobnie będziesz musiał zmienić sporo kodu. Na szczęście Google nie pozostawiło programistów w tyle.
Ze względu na ograniczenia AsyncTask z biegiem czasu pojawiły się alternatywy, takie jak RxJava i nowa (ish) biblioteka Coroutines Kotlina. Te alternatywy mają zwykle znacznie większą elastyczność i funkcje niż AsyncTask, więc zyskały sporo popularności. W swoim zawiadomieniu o wycofaniu AsyncTask firma Google zaleca korzystanie ze środowiska Java Concurrency lub Kotlin Coroutines.
Osobiście zacząłem już używać Coroutines Kotlina i nie oglądałem się wstecz. Oczywiście wiem, że wiele osób ściśle zintegrowało swój kod z AsyncTask, więc jest to dla nich prawdopodobnie co najmniej niewielka niedogodność. Dobrze, że jest w czym wybierać. Zmiana kodu może być denerwująca, ale przynajmniej tym razem jest to możliwe.
Jeśli chcesz uzyskać więcej szczegółów, możesz sprawdzić zatwierdzenie Tutaj. Zatwierdzenie zostało dziś scalone i jeśli nie jest w przygotowaniu wydanie konserwacyjne Androida, zmiana ta zostanie odzwierciedlona w Androidzie 11 w przyszłym roku.