Google прекращает поддержку Android AsyncTask API в Android 11

click fraud protection

Android API для асинхронной логики, AsyncTask, скоро выйдет из эксплуатации. Согласно коммиту AOSP, API будет устаревшим в Android 11.

Уже много лет Android AsyncTask является основным инструментом как для начинающих, так и для опытных разработчиков. Если вы когда-либо искали в Google руководство по какой-либо асинхронной логике в Android, скорее всего, первые несколько результатов предполагают использование AsyncTask. И это не случайный выбор. AsyncTask изначально был создан для упрощения взаимодействия между фоновыми операциями и пользовательским интерфейсом приложения. Какое-то время это получалось хорошо. AsyncTask действительно помогает упростить асинхронные задачи. Однако это не значит, что он идеален.

Многим приложениям необходимо получать информацию с удаленного сервера. Поскольку сетевые запросы могут занять некоторое время, обычно важно выполнять их асинхронно, чтобы они не приводили к зависанию приложения. После завершения операции пользовательский интерфейс можно обновить. Однако возможно, что к моменту завершения сетевого запроса соответствующая часть пользовательского интерфейса больше не существует, что может привести к сбоям или другим ошибкам. Хотя AsyncTask упрощает весь процесс, он не учитывает жизненный цикл приложений Android. Это означает, что нет встроенной защиты от завершения AsyncTask после изменения пользовательского интерфейса. Конечно, можно вручную добавлять проверки и другие средства защиты, но это добавляет много повторяющегося кода (также известного как шаблон). Из-за подобных проблем AsyncTask как бы отошёл на второй план. Google также не внес много изменений в его работу.

Что ж, похоже, что Google считает, что AsyncTask невозможно сохранить. В недавнем коммите AOSP AsyncTask был объявлен устаревшим по причинам, аналогичным тем, о которых я только что говорил. Хотя на самом деле это не такое уж большое изменение для конечных пользователей, оно может многое значить для разработчиков. Если вы поддерживаете старую кодовую базу или только начинаете выполнять асинхронные задачи в Android, вам, вероятно, придется изменить кучу кода. К счастью, Google не бросил разработчиков в пыль.

Из-за ограничений AsyncTask со временем появились альтернативы, такие как RxJava и новая (почти) библиотека Coroutines от Kotlin. Эти альтернативы, как правило, обладают гораздо большей гибкостью и возможностями, чем AsyncTask, поэтому они завоевали значительную популярность. В уведомлении об устаревании AsyncTask Google рекомендует использовать Java Concurrency framework или Kotlin Coroutines.

Лично я уже начал использовать сопрограммы Kotlin и не оглядывался назад. Конечно, я знаю, что многие люди тесно интегрировали свой код вокруг AsyncTask, так что, вероятно, для них это доставляет хотя бы небольшое неудобство. Хорошо, что есть из чего выбирать. Изменение кода может быть раздражающим, но, по крайней мере, на этот раз это возможно.

Если вам нужна более подробная информация, вы можете проверить коммит здесь. Коммит был объединен ранее сегодня, и, если в разработке не будет выпуска технической поддержки Android, мы увидим это изменение, отраженное в Android 11 в следующем году.