원문 : https://www.xda-developers.com/asynctask-deprecate-android-11/

 

Google is deprecating Android's AsyncTask API in Android 11

The Android API for asynchronous logic, AsyncTask, is on its way out. According to an AOSP commit, the API will be deprecated in Android 11.

www.xda-developers.com

몇 년동안 AsyncTask는 초보/전문 개발자들에게 중요한 기능이었다. 만약 안드로이드 비동기 로직에 대한 튜토리얼을 찾아본 적이 있다면, 맨 처음 나오는 검색 결과들이 AsyncTask를 사용할 것을 제안했을 것이다. AsyncTask는 백그라운드 기능과 앱 UI간 상호작용을 간단하게 하기 위해 만들어졌다. 한동안 잘 돌아갔다. AsyncTask는 정말로 비동기 작업을 단순화 시키는데 도움이 되었지만, 그렇다고 완벽하지는 않았다. 

많은 앱들이 (원격) 서버에서 정보를 가져온다. 네트워크 요청은 어느 정도 시간을 필요로 하기에, 앱이 멈추지 않도록 하기 위한 비동기 처리를 해야 한다. 기능이 완료되면 UI가 업데이트 된다. 하지만 네트워크 요청이 끝나거나, 해당 부분의 UI가 종료되어 충돌(crash)이나 다른 버그들을 일으킬 때까지만 가능하다. AsyncTask는 비동기 처리의 전체 프로세스를 더 간단하게 만들기 때문에, 안드로이드 앱의 라이프사이클을 고려(존중)하지 않는다.(안드로이드 앱 라이프 사이클을 따르지 않는다는 것 같다.) 이 말은 UI 변경 후에 비동기 처리 종료 작업에서 안드로이드 자체의 보호를 바랄 수 없다는 것이다. 개발자가 수작업으로 직접 확인 및 보호 기능을 넣어줄 수도 있지만, 그것은 대량의 중복 코드를 발생시킨다. 이런 문제 때문에 AsyncTask는 어느 정도 사장되었다. 구글 또한 이걸 딱히 수정하지 않았다(건드리지 않았다). 

구글은 AsyncTask를 구제불능이라고 생각한 것으로 보인다. 최근 AOSP(Android Open Source Project)에 커밋된 것을 보면, AsyncTask는 위에서 언급한 것과 유사한 이유를 대며 삭제(deprecated - 미사용 api 처리)되었다. 앱 사용자들에게는 신경쓸 문제도 아니지만, 개발자에게는 많은 것을 의미한다. 만약 오래된 코드를 계속 쓰거나 비동기 작업을 새로 만들려고 한다면, 코드를 좀 많이 수정해야 할 것이다. 다행히도 구글은 개발자들일 내팽겨치지 않았다. 

AsyncTask의 한계점 때문에, RxJava와 코틀린의 새로운 Coroutines 라이브러리와 같은 대한책들이 계속 나오고 있다. 이런 대안들은 AsyncTask보다 훨씬 더 많은 유연함과 특징들을 가지는 경향이 있어 꽤 인기를 끌었다. AsyncTask 삭제 공지로 인해, 구글은 Java의 Concurrency framework나 Kotlin의 Coroutines을 사용할 것을 권하고 있다. 

이하 포스팅 작성자의 개인 의견으로 스킵. 

애당 이슈 커밋 로그
https://android-review.googlesource.com/c/platform/frameworks/base/+/1156409

 

+ Recent posts