4 votes

Contourner le gestionnaire de mémoire ; maintenir l'application en vie

À mon travail, nous avons tous des appareils Android qui sont utilisés pour nous envoyer des travaux. Il utilise une application web accessible par n'importe quel navigateur web. Lorsqu'un nouveau travail arrive, nous sommes avertis par une alerte sonore. Cependant, en raison de la façon dont Android gère la mémoire, il arrive souvent que le navigateur Web soit "en sommeil" (je ne connais pas la terminologie appropriée). Ainsi, si nous recevons un nouveau travail, nous ne sommes pas avertis, à moins que nous ne rouvrions manuellement le navigateur Web pour le "réveiller".

Existe-t-il des solutions de contournement pour ce problème ?

Cheers

1voto

Nick Pierpoint Points 7976

On peut supposer que l'appareil utilise le wifi pour accéder à l'Internet - cela peut valoir le coup d'essayer :

  • Réglages > Wifi
  • Appuyez sur le menu pour faire apparaître Avancé
  • Tapez sur cette option de menu
  • Garder le Wifi allumé pendant le sommeil vérifiez que c'est bien réglé sur Jamais

De cette façon, lorsque l'appareil se met en veille, le wifi est toujours actif et fonctionne, et l'application web devrait toujours fonctionner.

Lorsqu'un nouveau travail arrive, nous sommes avertis par une alerte sonore.

Editar

La réponse ci-dessus n'est pas la bonne, mais d'après les commentaires ci-dessous, c'est bien celle-là, dans laquelle je cite,.

Peut-être que l'approche de la gestion des emplois est faite de la manière suivante mauvaise voie , surtout dans le contexte d'Android - une application personnalisée qui a une service en utilisant une partie wake-lock pour "ping" vérifier les travaux, envoyer un événement à l'application et l'application se réveille. IMHO, un navigateur n'est pas le bon outil pour les besoins dans votre cas.

En bref, il n'y a rien qui puisse être fait pour garder le navigateur web "vivant" pendant que l'appareil est en sommeil, car Android, dans les coulisses, lorsque le noyau n'est pas en état de veille, suit les applications en cours d'exécution, et en fonction des contraintes de puissance et de mémoire, en particulier dans le cas d'une page de navigateur web, (si elle comporte beaucoup de styles, plus la page est élaborée, plus elle accapare de ressources, en particulier si elle comporte beaucoup de Javascript), le noyau pourrait avoir pour tâche de l'abattre et de l'éjecter de la mémoire, ce qui n'est pas une voie fiable.

TL;DR: Une application appropriée au lieu d'un simple navigateur web résoudra le problème du PO.

Hors sujet : La section technologique du journal télévisé de la BBC a publié un article sur la navigation Web mobile et la façon dont elle peut affecter la batterie en raison de la façon dont les pages Web sont conçues. En fait, elles ont été conçues de façon incorrecte pour la plate-forme mobile, avec trop de styles, trop de scripts, sans parler de Flash, ce qui a eu un effet négatif sur la façon dont Android affiche/présentait la page, ce qui a entraîné une consommation importante de cycles du processeur.

0voto

Ronald Wildenberg Points 18258

La meilleure option serait d'ajuster les paramètres minfree du tueur de mémoire faible.

Un peu de contexte :

Le tueur de mémoire faible est le pilier de la gestion de la mémoire d'Android. Il s'agit d'une approche plus élégante que l'oomkiller de Linux et elle fonctionne de manière proactive pour maintenir le pool de mémoire libre plutôt que d'intervenir uniquement lorsque vous êtes complètement à court de mémoire libre. Il sépare les applications en plusieurs catégories pour les tuer si le pool de mémoire libre descend en dessous de certains points. Elles sont généralement classées dans l'ordre suivant, de la première à la dernière :

EMPTY_APP - Il s'agit d'applications qui ne font rien ou qui n'attendent rien. Elles restent simplement en mémoire.

CONTENT_PROVIDER - Ce sont des applications d'arrière-plan qui fournissent du contenu aux applications actives (par exemple, le Play Store en utilise une pour vérifier périodiquement les mises à jour. La synchronisation Facebook de HTC est un autre exemple courant).

HIDDEN_APP - Ils sont assis en arrière-plan, ne font rien, mais sont toujours vivants et attendent peut-être quelque chose.

SECONDARY_SERVER - Un serveur fonctionnant en arrière-plan pour fournir des services à une application en cours d'exécution.

VISIBLE_APP - Il s'agit d'une application qui est en arrière-plan, mais qui est en train de faire quelque chose.

FOREGROUND_APP - Il s'agit de ce qui est actuellement en cours d'exécution et à l'écran.

Si le pool de mémoire libre descend en dessous d'une certaine quantité (par exemple 80MB est la valeur par défaut sur mon GS3), le système va d'abord commencer à tuer tout ce qui est listé comme une application vide jusqu'à ce que le pool soit de nouveau au-dessus de cette ligne. Si après avoir tué toutes les applications vides, la mémoire est toujours en dessous de la ligne suivante (par exemple 64MB), il commencera sur les fournisseurs de contenu, et ainsi de suite, jusqu'à ce que finalement si seule l'application de premier plan prend toute la mémoire (Sur mon GS3, si tout sauf l'application de premier plan a été tué et qu'il y a toujours moins de 32MB de mémoire libre) et menace le système, elle sera tuée.

Pour en revenir à votre question, ce que nous voulons faire, c'est ajuster ces valeurs vers le bas, de sorte que le tueur interviendra plus tard et, espérons-le, ne tuera pas le navigateur alors que vous voulez encore l'ouvrir.

L'application MinFreeManager vous permettra d'ajuster ces valeurs. Vous pouvez également les modifier directement dans /sys/module/lowmemorykiller/parameters/minfree où les paramètres sont en pages (4 kilo-octets, donc une valeur de 8192 signifie 32MB comme ((8192*4)/1024=32MB), et listés dans l'ordre inverse de ce que j'ai listé ci-dessus. Pour les deux, vous aurez besoin de Root. Si vous n'avez pas Root, il n'y a rien que nous puissions faire pour vous aider.

Dans votre cas, le paramètre HIDDEN_APP (4e élément du fichier minfree) est probablement ce que nous devons modifier. Par exemple, ce paramètre est par défaut de 56MB sur mon GS3. Le réduire de moitié à 28M ou utiliser le préréglage léger dans MinFreeManager serait un bon point de départ pour le modifier.

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