비동기 논리를 위한 Android API인 AsyncTask가 곧 출시됩니다. AOSP 커밋에 따라 API는 Android 11에서 더 이상 사용되지 않습니다.
수년 동안 Android의 AsyncTask는 초보자와 전문 개발자 모두를 위한 주요 도구였습니다. Android의 모든 종류의 비동기 논리에 대한 튜토리얼을 Google에서 검색한 적이 있다면 처음 몇 가지 결과에서 AsyncTask 사용을 제안할 가능성이 있습니다. 이것도 무작위 선택이 아닙니다. AsyncTask는 원래 백그라운드 작업과 애플리케이션 UI 간의 상호 작용을 단순화하기 위해 만들어졌습니다. 한동안은 그게 잘 됐어요. AsyncTask는 실제로 비동기 작업을 단순화하는 데 도움이 됩니다. 그렇다고 해서 완벽하다는 뜻은 아닙니다.
많은 애플리케이션에서 수행해야 할 작업 중 하나는 원격 서버에서 정보를 가져오는 것입니다. 네트워크 요청은 시간이 걸릴 수 있으므로 일반적으로 애플리케이션이 정지되지 않도록 비동기식으로 수행하는 것이 중요합니다. 작업이 완료되면 UI를 업데이트할 수 있습니다. 그러나 네트워크 요청이 완료될 때 UI의 관련 부분이 더 이상 존재하지 않아 충돌이나 기타 버그가 발생할 수 있습니다. AsyncTask는 전체 프로세스를 더 단순하게 만들지만 Android의 애플리케이션 수명 주기를 존중하지 않습니다. 이는 UI 변경 후 AsyncTask 종료에 대한 기본 보호 기능이 없음을 의미합니다. 물론 검사 및 기타 보호 기능을 수동으로 추가하는 것도 가능하지만 이로 인해 반복 코드(보일러플레이트라고도 함)가 많이 추가됩니다. 이와 같은 문제로 인해 AsyncTask는 일종의 중도에서 제외되었습니다. Google은 작동 방식도 크게 변경하지 않았습니다.
글쎄, Google의 의견은 AsyncTask가 저장 이상이라는 것 같습니다. 최근 AOSP 커밋에서 AsyncTask는 제가 방금 이야기한 것과 비슷한 이유로 더 이상 사용되지 않습니다. 이는 최종 사용자에게는 큰 변화가 아니지만 개발자에게는 큰 의미가 있을 수 있습니다. 이전 코드베이스를 유지하고 있거나 Android에서 비동기 작업을 막 시작하는 경우에는 많은 코드를 변경해야 할 가능성이 높습니다. 다행히도 Google은 개발자를 혼란에 빠뜨리지 않았습니다.
AsyncTask의 제한으로 인해 시간이 지남에 따라 RxJava 및 Kotlin의 새로운 (ish) Coroutines 라이브러리와 같은 대안이 생겨났습니다. 이러한 대안은 AsyncTask보다 유연성과 기능이 훨씬 더 많은 경향이 있어 상당한 인기를 얻었습니다. AsyncTask에 대한 지원 중단 공지에서 Google은 Java의 동시성 프레임워크 또는 Kotlin 코루틴을 사용할 것을 권장합니다.
개인적으로 저는 이미 Kotlin의 코루틴을 사용하기 시작했고 뒤돌아보지 않았습니다. 물론 많은 사람들이 AsyncTask를 중심으로 코드를 긴밀하게 통합했다는 것을 알고 있으므로 이것이 아마도 그들에게는 약간의 불편함일 것입니다. 선택할 수 있는 대안이 많다는 것은 좋은 일입니다. 코드를 변경하는 것이 귀찮을 수도 있지만, 적어도 이번에는 가능합니다.
더 자세한 내용을 알고 싶다면 커밋을 확인하세요. 여기. 커밋은 오늘 일찍 병합되었으며, 파이프라인에 Android 유지 관리 릴리스가 없다면 이 변경 사항은 내년 Android 11에 반영될 것입니다.