IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Questions concernant Service/AlarmManager


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut Questions concernant Service/AlarmManager
    Bonjour,

    depuis un petit moment déjà, je me penche sur les Services car j'en ai besoin pour l'application que je développe en ce moment.
    J'ai donc crée un Service qui utilise un TimerTask et qui permet d'envoyer une notification toutes les 30 secondes.
    Malheureusement, j'ai remarqué que ce service présente 2 problèmes :
    1) Le compteur des 30 secondes s'arrête lorsque le téléphone est en veille et ne n'émet donc plus aucune notification
    2) Il arrive qu'au bout d'un certain temps il crashe...

    En fouillant un peu sur internet, j'ai vu que je n'étais pas le seul à rencontrer ces problèmes, et j'ai également vu que l'AlarmManager semblait être une solution à mes problèmes.

    J'ai donc testé et effectivement, l'AlarmManager semble similaire au Service au détail près qu'il nécessite un BroadcastReceiver, et qui exécute le code du onReceive()...

    Suite à cela, je me suis posé quelques questions dont je n'ai malheureusement pas trouvé les réponses.
    Je me penche donc vers vous pour m'éclaircir sur certains points :
    - Existe-t-il une méthode qui empêcherait le compteur du service de s'arrêter lorsque le téléphone est en veille ?
    - AlarmManager n'est pas considéré comme un service, mais n'en est-il implicitement pas un ?
    - Certaines personnes veulent utiliser l'AlarmManager pour lancer un service toutes les X temps, mais n'est-il pas plus simple de mettre de faire exécuter le code dans le onReceive() ?
    - Est-ce plus coûteux qu'un Service en terme de mémoire ?

    Je vous remercie par avance pour vos réponses !

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    1) Le compteur des 30 secondes s'arrête lorsque le téléphone est en veille et ne n'émet donc plus aucune notification
    Oui c'est normal, quand le téléphone se met en veille aucun programme ne tourne plus.

    2) Il arrive qu'au bout d'un certain temps il crashe...
    Il faudrait voir le logcat, et l'erreur indiquée (ainsi que le code)

    j'ai vu que je n'étais pas le seul à rencontrer ces problèmes
    Ben en fait, même tout le monde, puisque c'est sensé fonctionner comme cela

    Existe-t-il une méthode qui empêcherait le compteur du service de s'arrêter lorsque le téléphone est en veille ?
    Non.

    AlarmManager n'est pas considéré comme un service, mais n'en est-il implicitement pas un ?
    Certaines personnes veulent utiliser l'AlarmManager pour lancer un service toutes les X temps, mais n'est-il pas plus simple de mettre de faire exécuter le code dans le onReceive() ?
    Non. L'alarmManager va envoyer un Intent à un broadcast receiver...Celui-ci doit utiliser le moins de temps possible pour y répondre... si l'action nécessite du temps (par exemple une requête internet), alors il faut passer par un service.

    Est-ce plus coûteux qu'un Service en terme de mémoire ?
    Non, de toute manière il faut charger l'application en mémoire (process), donc...

    Mais attention... une "alarme" peut demander un reveil explicite du téléphone (écran éteint quand même), mais toutes 30 secondes cela signifie la mort de la batterie en 2/3h... (voire moins si on fait des accès réseaux)... En général, téléphone en veille, on laisse l'alarm-manager faire ses appels "groupés" (donc décalés pendant des fenêtres de reveil, toutes les 15min environ).

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut
    Bonsoir nicroman,

    je te remercie pour ta réponse très claire !
    Cependant, je n'ai pas saisi le dernier point que tu as mentionné :
    En général, téléphone en veille, on laisse l'alarm-manager faire ses appels "groupés" (donc décalés pendant des fenêtres de reveil, toutes les 15min environ).
    Et je comprend parfaitement que 30 secondes soit un sacré coup pour la batterie du téléphone... Aurais-tu un niveau de compteur qui soit viable ? (Je pensais en réalité régler le compteur à 30 minutes minimum, voir 1 heure).

    Edit :
    Il faudrait voir le logcat, et l'erreur indiquée (ainsi que le code)
    J'ai eu le problème en le testant sur mon téléphone directement . Sur l'émulateur, je ne l'ai jamais rencontré surement car je ne l'ai pas testé assez longtemps.

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Il y a 2 modes d'alarme à chaque fois:

    "WAKEUP": le téléphone sortira de veille pour l'alarme. Indispensable pour les "vraies" alarmes.
    "NORMAL": le téléphone ne sort pas de veille, mais l'alarme sera déclenchée à la prochaine sortie de veille programmée. Ce qu'il fait pendant un court laps de temps toutes les 15 minutes environ pour diverses opérations.

    Donc une alarme programmée toutes les 5 minutes en 'normal' (pas de wakeup) ne prendra pas plus de batterie qu'une programmée toutes les 15 minutes quand le téléphone est en veille.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Par défaut
    Bonsoir necroman,

    je te remercie encore pour ta réponse !
    Je vais me renseigner davantage sur le mode NORMAL car je trouve cela en effet bien plus intéressant pour mon cas !
    Je mets donc le status de cette discussion comme étant résolue .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/09/2008, 17h03
  2. [Servlet + Class] question concernant plusieurs connections
    Par ShinJava dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 29/11/2004, 16h39
  3. Réponses: 7
    Dernier message: 10/09/2004, 14h28
  4. [Indy] Questions concernant l'envoi de mail
    Par delphicrous dans le forum Web & réseau
    Réponses: 3
    Dernier message: 24/06/2004, 15h06
  5. Question concernant l'API "WaitforSingleObject
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 29/03/2003, 07h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo