3 votes

Android échange-t-il la mémoire utilisée par les services d'avant-plan ?

En regardant un appareil Android KitKat fabriqué par LG, je vois qu'une application appelée Software Update es toujours fonctionnant comme un service de premier plan (100). Ce service occupe une quantité importante de mémoire.

D'après ce que je peux dire, cette application ne sert qu'aux mises à jour OTA, ce qui est un événement exceptionnellement rare (ce n'est jamais arrivé jusqu'à présent !).

Afin de libérer de la mémoire de travail, je pensais empêcher l'application de démarrer au démarrage (en désactivant son récepteur de diffusion), puis la lancer manuellement de temps en temps pour vérifier les mises à jour.

Mais avant de faire ça, je veux demander si ça a de l'importance ? Pour les applications qui sont toujours en train d'exécuter un service de premier plan, Android va-t-il simplement les sortir de la mémoire comme une application d'arrière-plan ? Ou bien la mémoire qu'elles utilisent est-elle complètement bloquée à tout moment, ce qui rend mon plan intéressant ?

1voto

lord-ralf-adolf Points 1063

Vous avez dit :

(en désactivant son récepteur de diffusion)


Tout d'abord, permettez-moi de souligner que Broadcast Receiver y Service n'est pas la même chose, vous obtiendrez la différence entre les deux dans la réponse.

Récepteurs de radiodiffusion :

Un BroadcastReceiver permet à une application de s'exécuter, pour une courte durée, en arrière-plan. de temps, en arrière-plan, en raison d'un autre événement. Lors de la gestion d'une diffusion, l'application dispose d'un ensemble fixe de temps (actuellement 10 secondes) pour effectuer son travail. Si elle ne pas terminé dans ce délai, l'application est considérée comme se l'application se comporte mal, et son processus est immédiatement mis en arrière-plan afin d'être tué pour la mémoire si nécessaire.

Comme vous pouvez le lire, BroadcastReceiver ne peut pas faire tourner une application en arrière-plan pendant plus de 10 secondes, ce qui est un peu limité, n'est-ce pas ?

Services :

  • Citant le même auteur du même article :

Un service permet à une application d'implémenter des services à long terme opérations en arrière-plan. Il y a en fait beaucoup d'autres fonctions que les services fournissent.

Android La gestion des processus pour les services est différente de la diffusion car un nombre illimité de services peut demander à être exécuté pendant une durée d'être exécutés pendant une durée inconnue. Il peut ne pas y avoir assez de RAM pour pour faire fonctionner tous les services qui le demandent. garantie de pouvoir les maintenir en fonctionnement.

S'il y a trop peu de RAM, les services d'hébergement de processus seront immédiatement tués comme le sont les processus d'arrière-plan. Cependant, si approprié, Android se souviendra que ces services souhaitent rester en cours d'exécution, et redémarre leur processus ultérieurement, lorsque plus de RAM est disponible. Par exemple, si l'utilisateur se rend sur une page web qui nécessite une une grande quantité de RAM, Android peut tuer les processus de services d'arrière-plan comme la synchronisation jusqu'à ce que les besoins en mémoire du navigateur diminuent.

Les services peuvent négocier davantage ce comportement en demandant à être considérés comme "premier plan". Cette demande place le service dans un état "please don't tuer", mais nécessite l'envoi d'une notification à l'utilisateur. à propos de son fonctionnement actif, comme les lecteurs de musique, les anti-virus, etc ...

L'application doit montrer une notification, dans votre cas, c'est une application système qui n'a pas besoin de cette exigence, elle peut dire au système qu'elle doit être en cours d'exécution tout le temps et le système ne la tuera pas seulement si le système a besoin de plus de mémoire et qu'elle est le seul service encore en cours d'exécution (quelles sont les chances que cela se produise).

Pour en revenir à votre question, cela vaut-il le coup ? Je pense que oui, car c'est un gaspillage (vraiment un gaspillage) de la mémoire utilisée et qui ne sera pas libérée, sans but.

J'ajouterai :

Votre plan pour arrêter son récepteur de diffusion peut ne pas garder le service en arrière-plan, je vous recommande de désactiver l'application sous Setting > application > all et cliquez sur disable (si ce bouton est là) ou geler l'application en utilisant titanium backup.

Ref : http://Android-developers.blogspot.com/2010/04/multitasking-Android-way.html http://www.howtogeek.com/161225/htg-explains-how-Android-manages-processes/ http://developer.Android.com/training/articles/memory.html

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X