Google припиняє підтримку Android AsyncTask API в Android 11

Android API для асинхронної логіки, AsyncTask, на виході. Відповідно до коміту AOSP, API буде застарілим в Android 11.

Протягом багатьох років AsyncTask від Android є основним інструментом для розробників-початківців і експертів. Якщо ви коли-небудь шукали в Google підручник з будь-якої асинхронної логіки в Android, швидше за все, перші кілька результатів пропонують використовувати AsyncTask. Це теж не випадковий вибір. AsyncTask спочатку було створено для спрощення взаємодії між фоновими операціями та інтерфейсом користувача програми. Деякий час це вдавалося добре. AsyncTask дійсно допомагає спростити асинхронні завдання. Однак це не означає, що він ідеальний.

Єдине, що потрібно зробити багатьом програмам, — отримати інформацію з віддаленого сервера. Оскільки мережеві запити можуть тривати деякий час, зазвичай важливо виконувати їх асинхронно, щоб вони не призвели до зависання програми. Після завершення операції інтерфейс користувача можна оновити. Однак можливо, що до моменту завершення мережевого запиту відповідна частина інтерфейсу користувача більше не існує, що може спричинити збої або інші помилки. Хоча AsyncTask спрощує загальний процес, він не враховує життєвий цикл програми Android. Це означає, що немає вбудованого захисту від завершення AsyncTask після зміни інтерфейсу користувача. Звичайно, можна вручну додати перевірки та інші засоби захисту, але це додає багато повторюваного коду (відомий як шаблон). Через подібні проблеми AsyncTask відійшов на другий план. Google також не вніс багато змін у його роботу.

Що ж, здається, Google вважає, що AsyncTask неможливо зберегти. У нещодавньому коміті AOSP AsyncTask було визнано застарілим, посилаючись на причини, подібні до тих, про які я щойно говорив. Хоча це насправді не велика зміна для кінцевих користувачів, вона може багато означати для розробників. Якщо ви підтримуєте старішу кодову базу або тільки починаєте працювати з асинхронними завданнями в Android, вам, швидше за все, доведеться змінити купу коду. Однак, на щастя, Google не залишив розробників у пилу.

Через обмеження AsyncTask з часом з’явилися альтернативи, такі як RxJava та нова (ish) бібліотека Coroutines Kotlin. Ці альтернативи, як правило, мають набагато більше гнучкості та функцій, ніж AsyncTask, тому вони набули значної популярності. У своєму повідомленні про припинення підтримки AsyncTask Google рекомендує використовувати фреймворк Java Concurrency або Kotlin Coroutines.

Особисто я вже почав використовувати Coroutines Kotlin і не оглядався назад. Звичайно, я знаю, що багато людей тісно інтегрували свій код навколо AsyncTask, тому це, мабуть, принаймні невелика незручність для них. Добре, що є багато альтернатив на вибір. Можливо, зміна коду дратує, але принаймні цього разу це можливо.

Якщо вам потрібні додаткові відомості, ви можете перевірити комміт тут. Комітт було об’єднано раніше сьогодні, і якщо в розробці не буде випуску підтримки Android, ми побачимо цю зміну в Android 11 наступного року.