Veraltung der AsyncTask-API in Android 11: Alternative mit Java-Parallelität
Während Android 11 näher rückt, stellt Google die AsyncTask-API schrittweise ein und empfiehlt Entwicklern um java.util.concurrent für asynchrone Vorgänge zu übernehmen. Diese Verschiebung wirft die Frage auf: Wie können Sie AsyncTask effektiv durch java.util.concurrent ersetzen und gleichzeitig die Kompatibilität mit API-Level 16 und höher beibehalten?
Betrachten Sie den folgenden Ausschnitt aus der statischen inneren Klasse einer Aktivität:
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); } }
Eine praktikable Lösung besteht darin, Executoren aus dem Paket java.util.concurrent zu nutzen. Hier ist eine Java-Implementierung, die auf einem Kotlin-Ansatz basiert, der in einem Android-Async-API-Beitrag zu finden ist. Er ist veraltet:
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 } }); } });
Für Java 8-Benutzer ist eine prägnantere Version verfügbar:
ExecutorService executor = Executors.newSingleThreadExecutor(); Handler handler = new Handler(Looper.getMainLooper()); executor.execute(() -> { // Background work here handler.post(() -> { // UI Thread work here }); });
While Da Java möglicherweise nicht mit der Kürze von Kotlin mithalten kann, bieten diese Alternativen eine praktikable Lösung für asynchrone Vorgänge in der Post-AsyncTask-Ära und stellen die Kompatibilität mit der API-Ebene sicher 16 Geräte.
Das obige ist der detaillierte Inhalt vonWie kann ich AsyncTask in Android effektiv durch java.util.concurrent ersetzen und gleichzeitig die Abwärtskompatibilität wahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!