Android - utilisation du service d'arrière-plan
-
06-07-2019 - |
Question
J'ai un service IDL à casiers mixtes que j'utilise de deux manières:
- Le service va générer un thread et effectuer un appel réseau pour récupérer du contenu XML au nom d'Activity. Le contenu est renvoyé à l'activité via l'IDL du client qui définit les méthodes de rappel
- Si l'utilisateur choisit l'option de notification, le service crée un minuteur qui est exécuté à plusieurs reprises et crée une notification sur la barre d'outils. Il a également mis le contenu en cache afin que, lorsque Activity demande une mise à jour, il soit servi à partir du cache plutôt que d’un autre appel réseau
Mes questions sont donc
- Pour le scénario 1, quel est le prix (le cas échéant) que je paie pour utiliser le service pour les appels réseau au lieu de créer un fil d’arrière-plan directement dans l’Activité?
- Pour le n ° 2 - est-il préférable de changer d'implémentation en AlarmManager? J'ai remarqué que lorsque je supprime les processus avec TasKiller, mon service meurt et ne redémarre jamais. Le travail basé sur AlarmManager aurait-il une meilleure chance de récupération?
La solution
Pour le scénario 1, quel est le prix (si je paie pour utiliser le service pour appels réseau au lieu de créer fil de fond directement dans le Activité?
Je suppose que, puisque vous avez dit qu'il s'agissait d'un "service IDL", c'est ce que j'appelle un service distant: vous utilisez AIDL pour définir une interface utilisée au-delà des limites du processus.
Dans ce cas, le coût est de plusieurs Mo de RAM pour le second processus, plus un peu de temps CPU pour la surcharge IPC. Combien de temps "peu de temps CPU"? Cela dépend de la fréquence à laquelle il est appelé.
Pour # 2 - est-il préférable de changer mise en œuvre dans AlarmManager?
En général, oui. Idéalement, les services sont en mémoire le moins possible.
J'ai remarqué que lorsque je tue les processus avec TasKiller mon service meurt et ne sera jamais redémarré, serait Le travail de base AlarmManager a mieux chance de récupération?
Non, car "tâche tueur" les applications ont tendance à abuser d'une API (selon les mots de Dianne Hackborn) qui tue tout, y compris les alarmes planifiées. À l'heure actuelle, il n'y a pas de solution fiable & amp; défense efficace contre les "tueurs de tâches" " que je sache.