Heim > Java > javaLernprogramm > Wie kann ich AsyncTask in Android effektiv durch java.util.concurrent ersetzen und gleichzeitig die Abwärtskompatibilität wahren?

Wie kann ich AsyncTask in Android effektiv durch java.util.concurrent ersetzen und gleichzeitig die Abwärtskompatibilität wahren?

DDD
Freigeben: 2025-01-05 08:06:40
Original
1002 Leute haben es durchsucht

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

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);
    }
}
Nach dem Login kopieren

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
            }
        });
    }
});
Nach dem Login kopieren

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
    });
});
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage