Heim > Java > javaLernprogramm > Was sind die geeigneten Ersetzungen für AsyncTask in Android 11 und wie kann ich meinen vorhandenen AsyncTask-Code migrieren, um sie zu verwenden und auf minSdkVersion 16 abzuzielen?

Was sind die geeigneten Ersetzungen für AsyncTask in Android 11 und wie kann ich meinen vorhandenen AsyncTask-Code migrieren, um sie zu verwenden und auf minSdkVersion 16 abzuzielen?

DDD
Freigeben: 2024-12-15 07:18:14
Original
216 Leute haben es durchsucht

What are the suitable replacements for AsyncTask in Android 11 and how can I migrate my existing AsyncTask code to use them, targeting minSdkVersion 16?

AsyncTask API in Android 11 veraltet: Welche Alternativen gibt es?

Google hat angekündigt, dass die Android AsyncTask API in Android 11 nicht mehr unterstützt wird, und empfiehlt stattdessen die Verwendung von java.util.concurrent. Sie können die Commit-Informationen hier einsehen:

 * @deprecated Use the standard <code>java.util.concurrent</code> or
 *   <a href=&quot;https://developer.android.com/topic/libraries/architecture/coroutines&quot;>
 *   Kotlin concurrency utilities</a> instead.
 */
@Deprecated
public abstract class AsyncTask<Params, Progress, Result> {
Nach dem Login kopieren

Wenn Sie eine ältere Codebasis pflegen, die asynchrone Aufgaben in Android verwendet, ist es wahrscheinlich, dass Sie diese in Zukunft ändern müssen. Meine Frage ist, wie ich den unten gezeigten Codeausschnitt richtig durch java.util.concurrent ersetzen kann. Es handelt sich um eine statische innere Aktivitätsklasse. Ich suche nach einer Lösung, die in minSdkVersion 16 funktioniert.

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

Alternative:

Sie können Executoren direkt aus dem java.util.concurrent-Paket verwenden.

Ich habe auch online nach Informationen gesucht und im folgenden Artikel eine Lösung gefunden: Android Async API ist veraltet.

Leider ist der Artikel in Kotlin geschrieben, aber nach einiger Mühe habe ich ihn in Java konvertiert. Nachfolgend finden Sie die Lösung.

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

Ist es nicht ganz einfach? Wenn Sie in Ihrem Projekt Java 8 verwenden, können Sie es noch weiter vereinfachen.

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

Trotzdem ist es Kotlin in Bezug auf den prägnanten Code nicht überlegen, aber es ist besser als frühere Java-Versionen.

Ich hoffe, das hilft. Danke!

Das obige ist der detaillierte Inhalt vonWas sind die geeigneten Ersetzungen für AsyncTask in Android 11 und wie kann ich meinen vorhandenen AsyncTask-Code migrieren, um sie zu verwenden und auf minSdkVersion 16 abzuzielen?. 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