Retrofit callback sur le thread principal
Avec un appel comme :
@GET("/user/{id}/data")
void getUserData(@Path("id") int id, Callback<Data> cb);
De rappel est censé être exécuté sur le thread principal (si vous n'utilisez pas RxJava). Mes questions sont les suivantes :
- Où l'analyse se produire (supposons que je suis en utilisant un convertisseur XML pour les processus de réponse). Est ce fil conducteur, ou un autre ? Cela dépend-il de convertisseur de mise en œuvre ?
- Si je dois inclure certains (lourd) règle de validation/règles d'affaires, dois-je lancer un nouveau thread à l'intérieur de appelable ? Ou est-ce bien d'avoir fait dans les méthodes de Rappel ?
Je suis à la recherche de moyens pour obtenir des données dans mon activité à partir d'un web-service en évitant de gestion des threads sur mon propre (ou en utilisant d'autres approches comme IntentService, etc.), mais je suis peur de l'utilisation de RxJava soit (en raison de la prise en charge expérimentale). Est-il une autre approche suggérée pour faire face à ce problème ?
source d'informationauteur Jaguar
Vous devez vous connecter pour publier un commentaire.
Toujours un thread d'arrière-plan, peu importe le convertisseur que vous utilisez.
C'est assez subjectif et il y a beaucoup de façons de l'aborder. Le
Callback
sera exécuté sur le thread principal par défaut.Vous pouvez modifier le thread sur lequel rappels sera invoquée par la fourniture d'une coutume
Executor
à laRestAdapter.Builder
. Cela va affecter tous les services construit parRestAdapter
cependant, qui peut ne pas être ce que vous voulez.Il n'y a rien de mal avec la fraie un autre thread (ou enqueueing sur un exécuteur testamentaire) à partir de la
Callback
si le travail que vous voulez faire peut être fait en parallèle avec la mise à jour de l'INTERFACE utilisateur (par exemple, la lumière-poids de la mise en cache).Si le cher, le travail doit être fait avant de notifier l'INTERFACE utilisateur, alors vous êtes mieux de commutation de la méthode synchrone (pas de rappel) et en faisant de l'enfilage de vous-même. De cette façon, vous pouvez procéder à de coûteuses opérations avant et après l'appel HTTP (fichier i/o, la mise en cache, de la transformation, de la validation, etc.).
Nous utilisons actuellement RxJava (dont la Rénovation a un support expérimental) pour ce que vous demandez: