Maison > Java > javaDidacticiel > Quels sont les remplacements appropriés pour AsyncTask dans Android 11 et comment puis-je migrer mon code AsyncTask existant pour les utiliser, en ciblant minSdkVersion 16 ?

Quels sont les remplacements appropriés pour AsyncTask dans Android 11 et comment puis-je migrer mon code AsyncTask existant pour les utiliser, en ciblant minSdkVersion 16 ?

DDD
Libérer: 2024-12-15 07:18:14
original
215 Les gens l'ont consulté

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?

API AsyncTask obsolète dans Android 11 : quelles sont les alternatives ?

Google a annoncé qu'il rendrait obsolète l'API Android AsyncTask dans Android 11 et recommande d'utiliser java.util.concurrent à la place. Vous pouvez consulter les informations de validation ici :

 * @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> {
Copier après la connexion

Si vous conservez une ancienne base de code qui utilise des tâches asynchrones dans Android, il est probable que vous devrez la modifier à l'avenir. Ma question est la suivante : comment puis-je remplacer correctement l'extrait de code présenté ci-dessous par java.util.concurrent. Il s’agit d’une classe interne statique d’Activité. Je recherche une solution qui fonctionne dans 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) ;
        }     


    }
Copier après la connexion

Alternative :

Vous pouvez utiliser directement les exécuteurs du package java.util.concurrent.

J'ai également recherché des informations en ligne et trouvé une solution dans l'article suivant : L'API Android Async est obsolète.

Malheureusement, l'article est écrit en Kotlin mais après quelques efforts je l'ai converti en Java. Voici donc la solution ci-dessous.

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
            }
        });
    }
});
Copier après la connexion

N'est-ce pas très simple ? Si vous utilisez Java 8 dans votre projet, vous pouvez le simplifier encore davantage.

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

executor.execute(() -> {
    //Background work here
    handler.post(() -> {
        //UI Thread work here
    });
});
Copier après la connexion

Pourtant, il ne bat pas Kotlin en termes de code concis, mais il est meilleur que les versions Java précédentes.

J'espère que cela vous aidera. Merci!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal