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 :

Problème de service en cours d'exécution


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    etuidiant
    Inscrit en
    Octobre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : etuidiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 64
    Par défaut Problème de service en cours d'exécution
    Salut, dans mon application j'utilise un service pour un alarme. Tout marche très bien mais ce que je me demande c'est au niveau des services qui tourne... je m'explique : quand je lance mon application, que je configure une alarme avec mon app je vais ensuite voir dans mes services, aucun processus ou service de mon application n'est entrain de tourner quand je regarde dans mes parametre de mon telephone "service en cours d'exécution". Une fois que mon alarme a en effet sonné que je consulte la notification qu'elle a créé et que je quitte ensuite mon application je vois que dans mes parametre j'ai 1 processus et 1 service de mon application qui sont en cours d'exécution.

    Donc voila ma question : pq est ce que le service et processus tourne après que l'alarme se soit enclenché et que j'ai quitté l'application. Est ce que je dois killer le processus ou quelque chose comme ca ? Parce que mine de rien ca consomme :p et je vois pas pourquoi ca consommerais après que l'alarme se soit enclenché :p ...

    voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Alarm alarm = new Alarm(datedate, taskId, true);
     
    			Alarm.createAlarm(NoteReminder.this, alarm);
     
    ........
    			PendingIntent pendingIntent = PendingIntent.getService(
    					NoteReminder.this, alarmid, myIntent,
    					PendingIntent.FLAG_CANCEL_CURRENT);
     
    			AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
     
    ..........
     
    			alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()
    					+ diff, pendingIntent);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
     
    ...
     
    public class MyAlarmService extends Service {
     
    NotificationManager nm;
     
    public void onCreate(Bundle savedInstanceState) {
     
    Toast myToast = Toast.makeText(this, "blabla", Toast.LENGTH_LONG);
    Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
     
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
    r.play();
     
    myToast.show();
     
    //vibre pendant 1 seconde, puis attend 1/2 secondes avant de recommencer (3 fois en tout).
    vibrator.vibrate(new long[]{0,1000,500,1000,500,1000}, -1);
    }
     
    public IBinder onBind(Intent intent) {
     
    Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
     
    return null;
     
    }
     
    public void onDestroy() {
     
    super.onDestroy();
     
    Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
     
    }
     
    public int onStartCommand(Intent intent, int flags, int startId) {
     
    	 Bundle bundle = intent.getExtras();	 
    	 long messageid = bundle.getLong("passID", 0);
    	 int messageee = (int) messageid;
     
    	 String message = TaskReminder.getTaskTitle(MyAlarmService.this, messageid);
    	 Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    	 Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);	 
     
    	final NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
     
    notification et le texte qui apparait à la création de la notfication
    	final Notification notification = new Notification(R.drawable.notification, "SaS reminder notification", System.currentTimeMillis());  
     
     
    	Bundle objetbunble = new Bundle();			
    	objetbunble.putLong("passID", messageid);
     
     
    	Intent myIntent = new Intent(this, ViewTaskReminder.class);
     
    	myIntent.putExtras(objetbunble);
     
     
    	final PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, myIntent, 0);
     
    	final String notificationTitle = "Reminder BIS";
    	final String notificationDesc = "This is a reminder from Spot&share reminder !";         
     
    	notification.setLatestEventInfo(this, notificationTitle, notificationDesc, pendingIntent);
    	notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL;
       notificationManager.notify(messageee, notification);
     
    	 Uri notificationring = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    	 Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notificationring);
    	 r.play();
     
    	 vibrator.vibrate(new long[]{0,1000,500,1000,500,1000}, -1);
     
    	return super.onStartCommand(intent, flags, startId);
    }
     
    ....
     
    }
    Si quelqu'un a une explication ;-) Merci !

  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
    La fin de la fonction met fin à l’exécution du service, sauf si demandé expressément... Attention, le service sera toujours "présent" juste qu'il ne tournera pas, donc il ne prendra qu'un peu de mémoire (faire attention néanmoins lors de l'exécution à ce problème de mémoire, et bien dés-allouer / fermer toute ressource ouverte)

    Ensuite l'AlarmManager va émettre un Intent au temps donné qui va redémarrer le service... rien que de très normal en somme.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Par défaut
    Citation Envoyé par nicroman Voir le message
    La fin de la fonction met fin à l’exécution du service, sauf si demandé expressément... Attention, le service sera toujours "présent" juste qu'il ne tournera pas, donc il ne prendra qu'un peu de mémoire (faire attention néanmoins lors de l'exécution à ce problème de mémoire, et bien dés-allouer / fermer toute ressource ouverte)

    Ensuite l'AlarmManager va émettre un Intent au temps donné qui va redémarrer le service... rien que de très normal en somme.
    Moi aussi j'ai remarqué ca avec mon alarm manager, meme si le service ne prend que peu de mémoire est-il possible de le terminer/détruire étant donné qu'il ne sert plus a rien je ne vois pas en quoi cela sert qu'il consome ?

  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
    A éviter de tout réinstancier si on a à nouveau besoin du service...
    Android est sensé s'occuper de le virer quand la mémoire du device est basse etc...
    Attention, quand on dit consomme, c'est juste "de la place mémoire", ca coute 0 en CPU / batterie ! Un peu comme le pre-fetch de windows par exemple...

    Toute demande de CPU "coûte" cher à un smartphone, donc le moins il travaille, le plus longtemps il peu fonctionner.
    Dès qu'un service est référencé par un Alarm Manager, il y a de fortes chances pour qu'il reste en mémoire (juste histoire que quand l'alarme survient, Android n'ai pas à redémarrer le processus, créer le service dedans, etc...). Encore une fois, si il n'y a vraiment plus de mémoire, il disparaîtra aussi, ce n'est juste pas utile.

Discussions similaires

  1. Redémarrer un service en cours d'exécution
    Par bza88 dans le forum Android
    Réponses: 1
    Dernier message: 05/09/2013, 12h48
  2. [Apache]Problème se services Apache
    Par bartmarley dans le forum Apache
    Réponses: 6
    Dernier message: 15/07/2004, 14h13
  3. Réponses: 2
    Dernier message: 29/01/2004, 11h05
  4. [Kylix] problème web service kylix
    Par RezzA dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2003, 14h50
  5. Réponses: 2
    Dernier message: 17/10/2002, 16h16

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