MENU

Android 11(Android-R) で AsyncTask がDeprecatedに

  • URLをコピーしました!

Androidで非同期処理をする場合、Kotlinだと、Corutineを使っている人も多いかと思いますが、JavaだとAsyncTaskはまだまだ現役。
いまさらなニュースになるのかもしれませんが、Android 11からAsyncTaskはDeprecated・非推奨になるようです。Deprecatedなので、すぐに利用できなくなるということはないと思うのですが、気になる方は、修正が必要になります。

[st_af id=”371″]

ポイント

Android 11から、AsyncTaskは Depricated

対応方針

対応

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

よかったらシェアしてね!
  • URLをコピーしました!
この記事で分かること