Dépréciation de l'API AsyncTask dans Android 11 : alternative avec la concurrence Java
À l'approche d'Android 11, Google supprime progressivement l'API AsyncTask, conseillant aux développeurs adopter java.util.concurrent pour les opérations asynchrones. Ce changement soulève la question : comment pouvez-vous remplacer efficacement AsyncTask par java.util.concurrent tout en conservant la compatibilité avec l'API de niveau 16 et supérieur ?
Considérez l'extrait suivant de la classe interne statique d'une activité :
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); } }
Une solution viable consiste à exploiter les exécuteurs du package java.util.concurrent. Voici une implémentation Java basée sur une approche Kotlin trouvée dans une API Android Async est un article obsolète :
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 } }); } });
Pour les utilisateurs de Java 8, une version plus concise est disponible :
ExecutorService executor = Executors.newSingleThreadExecutor(); Handler handler = new Handler(Looper.getMainLooper()); executor.execute(() -> { // Background work here handler.post(() -> { // UI Thread work here }); });
Alors Java n'est peut-être pas à la hauteur de la brièveté de Kotlin, ces alternatives fournissent une solution viable pour les opérations asynchrones dans l'ère post-AsyncTask, garantissant la compatibilité avec le niveau API 16 appareils.
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!