Je ne sais pas si cela est possible ou si je pense correctement.
Dans la formation de développeur Android pour Affichage efficace des bitmaps une version personnalisée de la AsyncTask
est utilisé pour rendre le code compatible avec les versions d'Android inférieures à la norme. HONEYCOMB
.
Ce grand réponse explique les différences entre AsyncTask
opération en pré et post HONEYCOMB
. La raison pour laquelle une version personnalisée est fournie dans le guide est que la version par défaut dans le système pré HONEYCOMB
(un pool de tâches) se plantera très facilement avec un java.util.concurrent.RejectedExecutionException
si le GridView
d'images défilent rapidement. Pour ce scénario, le post par défaut HONEYCOMB
(exécution en série sur un thread supplémentaire) est ce qui est requis.
Je pourrais facilement faire cela en utilisant une version plus récente de AsyncTask
dans mon projet (comme dans l'exemple de la formation de développeur) mais cela n'est pas très compatible avec les changements futurs.
Ce que je voudrais faire est le suivant :
Si la version est
HONEYCOMB
ou plus, utilisez l'implémentation deAsyncTask
fourni dans le cadre, alors que s'il est antérieur, utilisez le siteAsyncTask
fournie dans mon application.
Est-ce possible (et comment) ou dois-je envisager les choses différemment ?
EDIT : Je comprends comment fournir des conditionnelles basées sur l'exécution. SDK_VERSION
.
Le problème que j'ai est que AsyncTask
est une classe abstraite, ce qui signifie que je dois fournir une implémentation. Par exemple, j'ai un AsyncTask
appelé myTask
qui prolonge AsyncTask
comme ci-dessous :
public class myTask extends AsyncTask<Void, Void, Void> {
// Implementations for the abstract functions (doInBackground)
}
Comment puis-je décider quelle version du AsyncTask
est prolongé ?