Androidで非同期処理をする場合、Kotlinだと、Corutineを使っている人も多いかと思いますが、JavaだとAsyncTaskはまだまだ現役。
いまさらなニュースになるのかもしれませんが、Android 11からAsyncTaskはDeprecated・非推奨になるようです。Deprecatedなので、すぐに利用できなくなるということはないと思うのですが、気になる方は、修正が必要になります。
[st_af id=”371″]
ポイント
Android 11から、AsyncTaskは Depricated
対応方針
- java.util.concurrent を利用する
- Kotlin concurrency utilities に切り替える
対応
AsyncTaskを使う目的は、非同期処理した結果をUIに反映したい という用途で使っている人が大半ではないかと思います。そうでなければ、Corutineやjava.util.concurrentに切り替えるのは、数にもよりますが、そこまで大変な対応ではないのではと思います。そのため、AsyncTask利用をやめるにあたっては、UIへの反映方法を合わせて考える必要がありますが、対応案としては、以下の3つがあるかと思いますが、DataBinding化するのは、変更規模が大きくなると思いますので、HandlerかLiveDataを使うの対応が比較的容易かと思います。
- Handlerを使う
- LiveDataを使う
- DataBinding化する
Handerを使った変更例
AsyncTaskコード
private void executeByAsyncTask() {
AsyncTask task = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
return "update text string";
}
@Override
protected void onPostExecute(String s) {
textView.setText(s);
}
}.execute();
}java.util.concurrentとHandlerで置き換えた実装例
private void executeByConcurrentExecutor() {
final Handler handler = new Handler();
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() {
@Override
public void run() {
// do something in background
final String msg = "update text string";
//
// update UI
handler.post(new Runnable() {
@Override
public void run() {
textView.setText(msg);
}
});
}
});
}Android Developers
https://developer.android.com/reference/android/os/AsyncTask

