ホームページ > Java > &#&チュートリアル > Android で下位互換性を維持しながら AsyncTask を java.util.concurrent に効果的に置き換えるにはどうすればよいですか?

Android で下位互換性を維持しながら AsyncTask を java.util.concurrent に効果的に置き換えるにはどうすればよいですか?

DDD
リリース: 2025-01-05 08:06:40
オリジナル
993 人が閲覧しました

How Can I Effectively Replace AsyncTask with java.util.concurrent in Android while Maintaining Backward Compatibility?

Android 11 での AsyncTask API の廃止: Java 同時実行による代替手段

Android 11 が近づくにつれて、Google は AsyncTask API を段階的に廃止し、開発者にアドバイスしています非同期操作に java.util.concurrent を採用します。この変化により、API レベル 16 以降との互換性を維持しながら、AsyncTask を java.util.concurrent に効果的に置き換えるにはどうすればよいでしょうか?

アクティビティの静的内部クラスの次のスニペットを考えてみましょう:

private static class LongRunningTask extends AsyncTask<String, Void, MyPojo> {
    private static final String TAG = MyActivity.LongRunningTask.class.getSimpleName();
    private WeakReference<MyActivity> activityReference;

    LongRunningTask(MyActivity context) {
        activityReference = new WeakReference<>(context);
    }

    @Override
    protected MyPojo doInBackground(String... params) {
        // Some long running task
    }

    @Override
    protected void onPostExecute(MyPojo data) {
        MyActivity activity = activityReference.get();
        activity.progressBar.setVisibility(View.GONE);
        populateData(activity, data);
    }
}
ログイン後にコピー

実行可能な解決策の 1 つは、java.util.concurrent パッケージの Executor を利用することです。 Android Async API is Deprecated の投稿にある Kotlin アプローチに基づく Java 実装を次に示します:

ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());

executor.execute(new Runnable() {
    @Override
    public void run() {
        // Background work here

        handler.post(new Runnable() {
            @Override
            public void run() {
                // UI Thread work here
            }
        });
    }
});
ログイン後にコピー

Java 8 ユーザーの場合は、より簡潔なバージョンが利用可能です:

ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());

executor.execute(() -> {
    // Background work here
    handler.post(() -> {
        // UI Thread work here
    });
});
ログイン後にコピー

Java は Kotlin の簡潔さに匹敵しないかもしれませんが、これらの代替案は、A​​syncTask 以降の時代の非同期操作に実行可能なソリューションを提供します。 API レベル 16 デバイスとの互換性を確保します。

以上がAndroid で下位互換性を維持しながら AsyncTask を java.util.concurrent に効果的に置き換えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート