ホームページ >Java >&#&チュートリアル >Android 11 の AsyncTask の適切な代替品は何ですか?また、minSdkVersion 16 を対象として、既存の AsyncTask コードを移行して使用するにはどうすればよいですか?
AsyncTask API は Android 11 で非推奨になりました: 代替手段は何ですか?
Google は、Android 11 で Android AsyncTask API を廃止し、代わりに java.util.concurrent を使用することを推奨すると発表しました。ここでコミット情報を確認できます:
* @deprecated Use the standard <code>java.util.concurrent</code> or * <a href="https://developer.android.com/topic/libraries/architecture/coroutines"> * Kotlin concurrency utilities</a> instead. */ @Deprecated public abstract class AsyncTask<Params, Progress, Result> {
Android で非同期タスクを使用する古いコードベースを維持している場合は、将来的にコードベースを変更する必要がある可能性があります。私の質問は、以下に示すコード スニペットを java.util.concurrent に適切に置き換えるにはどうすればよいかということです。これは、Activity の静的な内部クラスです。 minSdkVersion 16 で動作するソリューションを探しています。
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) ; } }
代替:
java.util.concurrent パッケージの Executor を直接使用できます。
また、オンラインで情報を検索し、次の記事で解決策を見つけました: Android Async API は非推奨です。
残念ながらこの記事は 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 }); });
それでも、コードの簡潔さという点では kotlin に勝るものはありませんが、以前の Java バージョンよりは優れています。
これがお役に立てば幸いです。ありがとうございます!
以上がAndroid 11 の AsyncTask の適切な代替品は何ですか?また、minSdkVersion 16 を対象として、既存の AsyncTask コードを移行して使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。