OKHttp prend en charge à la fois api synchrone et asynchrone . Si je souhaite émettre une demande asynchrone, je peux:
Quelle est la différence entre ces 2 options? Et lequel est le meilleur?
Beaucoup diffère!
L'utilisation de AsyncTask
pour les requêtes HTTP est à peu près l'une des pires choses que vous puissiez faire sur Android. Il est semé d'embûches et de problèmes qu'il vaut mieux éviter inconditionnellement. Par exemple, vous ne pouvez pas annuler une demande pendant l'exécution. Les schémas d'utilisation de AsyncTask
fuient également fréquemment une référence à un Activity
, un péché cardinal de Android development.
L'async d'OkHttp est largement supérieur pour de nombreuses raisons:
Callback
est libérée et ne sera jamais appelée. De plus, si la demande n'a pas encore démarré, elle ne sera jamais exécutée. Si vous utilisez HTTP/2 ou SPDY, nous pouvons effectivement annuler la bande passante et l'énergie économisées à la mi-demande.Activity
peut être balisée avec l'instance Activity
. Ensuite, dans onPause
ou onStop
, vous pouvez annuler toutes les demandes marquées avec l'instance Activity
.Call
, cela est beaucoup plus efficace que la version bloquante.Donc, si vous le pouvez, utilisez Call.enqueue
!
Pas grand chose. OKHttp async est piloté par l'API OKHttp. Donc, tant que vous regroupez les pots pour toutes les plates-formes, vous devriez être bon. AsyncTask est Android façon de faire les choses.
Cependant, puisque la tâche Honeycomb Async exécute les tâches séquentiellement et non en parallèle. Cela signifie que bien que la méthode d'exécution d'AsyncTask couvre un nouveau thread qui exécute votre travail à partir du thread d'interface utilisateur, mais toutes les tâches envoyées à un AsyncTask s'exécutent dans le même thread fractionné.
Donc, pour 3 tâches soumises, vous n'obtenez pas 3 threads, ils s'exécutent tous de manière séquentielle sur un seul thread fractionné. Avec OKHttp, vous pouvez obtenir un véritable parallélisme en utilisant les rappels et les asynchrones GET et POST.
Bien que vous puissiez également faire un vrai parallélisme dans les méthodes AsyncTask (vérifiez les méthodes d'exécution surchargées dans AsyncTask), mais le comportement par défaut Android Android ne le fait pas).