GoogleはAndroid 11でAndroidのAsyncTask APIを非推奨にします

非同期ロジック用の Android API、AsyncTask が廃止されつつあります。 AOSP コミットによると、この API は Android 11 で非推奨になる予定です。

ここ何年も、Android の AsyncTask は、初心者と専門の開発者にとって同様に定番ツールでした。 Android の非同期ロジックに関するチュートリアルを Google で検索したことがある場合は、最初のいくつかの結果が AsyncTask の使用を示唆している可能性があります。 これもランダムな選択ではありません。 AsyncTask は元々、バックグラウンド操作とアプリケーションの UI の間の対話を簡素化するために作成されました。 しばらくの間、それはうまくいきました。 AsyncTask は、非同期タスクを簡素化するのに非常に役立ちます。 ただし、それが完璧であるという意味ではありません。

多くのアプリケーションが行う必要があることの 1 つは、リモート サーバーから情報を取得することです。 ネットワーク リクエストには時間がかかる場合があるため、アプリケーションがフリーズしないように、ネットワーク リクエストを非同期で実行することが通常は重要です。 操作が完了すると、UI を更新できます。 ただし、ネットワーク リクエストが完了するまでに、UI の関連部分が存在しなくなっている可能性があり、クラッシュやその他のバグが発生する可能性があります。 AsyncTask はプロセス全体を簡素化しますが、Android アプリケーションのライフサイクルを尊重しません。 つまり、UI の変更後に終了する AsyncTask に対する保護機能が組み込まれていません。 もちろん、チェックやその他の保護を手動で追加することは可能ですが、その場合、多くの繰り返しコード (別名定型文) が追加されます。 このような問題のせいで、AsyncTask は途中で挫折してしまいました。 Googleも仕組みに大きな変更を加えていない。

まあ、Google の意見では、AsyncTask は保存を超えているということのようです。 最近の AOSP コミットでは、先ほど説明したのと同様の理由を挙げて、AsyncTask が非推奨になりました。 これはエンドユーザーにとってはそれほど大きな変更ではありませんが、開発者にとっては大きな意味を持つ可能性があります。 古いコードベースを維持している場合、または Android で非同期タスクを使い始めたばかりの場合は、多くのコードを変更する必要がある可能性があります。 しかし幸いなことに、Google は開発者を放置していません。

AsyncTask には制限があるため、RxJava や Kotlin の新しい (っぽい) コルーチン ライブラリなど、時間の経過とともに代替手段が登場してきました。 これらの代替手段は AsyncTask よりもはるかに高い柔軟性と機能を備えている傾向があるため、かなりの人気を得ています。 Google は AsyncTask の非推奨通知の中で、Java の同時実行フレームワークまたは Kotlin コルーチンの使用を推奨しています。

個人的には、私はすでに Kotlin のコルーチンを使い始めており、振り返ったことはありません。 もちろん、多くの人が AsyncTask を中心にコードを緊密に統合していることは承知しています。そのため、これはおそらく彼らにとって少なくともわずかな不便でしょう。 選択肢がたくさんあるのは良いことです。 コードを変更するのは面倒かもしれませんが、少なくとも今回は可能です。

さらに詳細が必要な場合は、コミットをチェックアウトしてください ここ。 このコミットは本日初めにマージされており、パイプラインに Android メンテナンス リリースがない限り、この変更は来年の Android 11 に反映されることになります。