2011-06-04 4 views
1

Ma société a, en substance, entrepris un projet pour remplacer certains de ses pagers avec des smartphones stock fonctionnant sous Android. Tant qu'ils sont connectés, l'appareil doit écouter sur un socket particulier pour recevoir des "pages" d'un serveur. Mon implémentation naïve consistait à créer un service de premier plan qui: 1) a lancé un fil d'écoute, et 2) détient un PARTIAL_WAKE_LOCK.Android longue durée écouteur socket

Cela fonctionne correctement sauf si l'appareil a une longue période d'inactivité, 1 heure et plus. Ensuite, il semble que le système d'exploitation arrête le processus de mon application, ce qui, à juste titre, le laisse croire qu'il n'est pas utilisé. Je comprends parfaitement les raisons pour lesquelles je le fais, mais je me demande si je peux contourner cette restriction. Existe-t-il des moyens de signaler à Android que mon processus est suffisamment important pour rester en vie/que l'appareil est éveillé? J'ai appris Java et l'API Android pour ce projet, donc il y a beaucoup de domaines où mes connaissances sont incomplètes.

A défaut, compte tenu de la description de mes besoins d'affaires, comment suggéreriez-vous de mettre en œuvre cette fonctionnalité? Pendant que l'utilisateur est connecté à notre application personnalisée, l'appareil doit toujours être à l'écoute.

Merci à tous pour avoir lu cette question.

Répondre

4

Le système d'exploitation ne va pas tuer votre processus si vous utilisez Service.startForground(). C'est ce que des choses comme la lecture de musique utilisent, et vous ne voudriez pas que ceux-ci soient tués après un certain temps. Cela dit, pour ce genre de chose, vous n'avez généralement pas besoin de faire de votre service de premier plan - quand le système tue votre processus parce qu'il a été assis ou a besoin de la mémoire, il sait toujours que le service veut reste en cours d'exécution, donc redémarrera le service peu après cela. Voici comment fonctionnent les propres services de Google: un service .apk avec un service d'arrière-plan qui maintient une connexion réseau ouverte à un service Google qui signale les choses intéressantes à faire comme la synchronisation de nouveaux messages, la récupération et la livraison d'un C2DM Intention, etc.

De même, vous devez et non maintenir un verrou de sillage pendant tout ce temps. Vous allez tuer la batterie, en particulier sur certains appareils comme ceux avec le processeur Hummingbird de Samsung. La bonne façon de le faire est de laisser le socket ouvert et de laisser l'appareil s'endormir. Si des données sont envoyées à la socket, la CPU se réveillera pour fournir ces données et à ce stade, vous devrez acquérir un verrouillage de réveil partiel uniquement pour le temps nécessaire à la lecture et au traitement des données. Ce que vous décrivez ressemble à un travail pour Android Cloud to Device Messaging Framework

+0

Je vous remercie sincèrement d'avoir éclairci certaines de mes idées fausses. Je vais faire ces changements. – WorkerThread

0

Il n'est actuellement pas complètement ouvert mais il existe un lien d'inscription sur cette page. Je me suis inscrit et j'ai été accepté dans les 20 minutes suivant ma demande. Ça vaut le coup IMO.