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 :

Service qui s’arrête tout seul sans raison


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Par défaut Service qui s’arrête tout seul sans raison
    Bonjour tous le monde,

    Voilà je suis confronté à un problème à moins de 24H00 avant la publication de mon application (en version BETA) sur le playstore...

    J'ai un service que mon application lance à son démarrage qui se stop tout seul, défois il tiens plusieurs heures défois plusieurs minutes et impossible d'avoir des logs dessus...

    Voici le service:

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    package com.caranille.myownpet.Kernel;
     
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.app.TaskStackBuilder;
    import android.content.Context;
    import android.content.Intent;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.IBinder;
    import android.support.annotation.Nullable;
    import android.support.v7.app.NotificationCompat;
     
    import com.caranille.myownpet.DB.DBPetManage;
    import com.caranille.myownpet.MainActivity;
    import com.caranille.myownpet.Models.Pets;
    import com.caranille.myownpet.R;
     
    import java.util.Timer;
    import java.util.TimerTask;
     
    public class KernelStepCounterService extends Service implements SensorEventListener
    {
        static DBPetManage dbPetManage;
        private SensorManager mSensorManager;
        private Sensor mStepCounterSensor;
        private Sensor mStepDetectorSensor;
        private int xp;
        private int i;
        private Timer timer;
     
        @Override
        public void onCreate()
        {
            super.onCreate();
            timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    Refresh();
                }
            }, 60000, 60000);
            mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
            mStepCounterSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
            mStepDetectorSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
     
            mSensorManager.registerListener(this, mStepDetectorSensor,SensorManager.SENSOR_DELAY_FASTEST);
        }
     
        public int onStartCommand(Intent intent, int flags, int startId)
        {
            super.onStartCommand(intent, flags, startId);
            return START_STICKY;
        }
     
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
     
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
     
        }
     
        @Override
        public void onSensorChanged(SensorEvent event)
        {
            Sensor sensor = event.sensor;
            if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR)
            {
                i++;
                Notification("Refresh N° " + i, 1);
                xp++;
            }
        }
     
        public void Notification(String message, int level)
        {
            NotificationCompat.Builder mBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this).setSmallIcon(R.drawable.pet).setContentTitle("MyOwnPet").setContentText(message);
            Intent resultIntent = new Intent(this, KernelService.class);
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
            stackBuilder.addParentStack(MainActivity.class);
            stackBuilder.addNextIntent(resultIntent);
            PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT );
            mBuilder.setContentIntent(resultPendingIntent);
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            mNotificationManager.notify(level, mBuilder.build());
        }
     
        public void Refresh()
        {
            dbPetManage = new DBPetManage(this);
            dbPetManage.open();
     
            Pets pets = dbPetManage.NewPet();
            pets.setExperience(pets.getExperience() + xp);
     
            Notification("STEP Votre Pet à gagné " + xp + " D'experience", 2);
     
            dbPetManage.open();
            dbPetManage.SavePet(pets);
     
            xp = 0;
        }
     
        @Override
        public void onDestroy() {
            super.onDestroy();
            mSensorManager.unregisterListener(this);
            timer.cancel();
            Notification("Fin du suivit des pas", 3);
        }
    }
    Et je suis perdu avant il enregistré le nombre de pas dans la base de donnée à chaque detection et pour des raisons d'utilisation de mémoire je fait une addition du nombre de pas et toutes les minutes je l'enregistre...

    Et ce service se ferme tout seul alors que même si mon application GUI est fermée il doit resté lancé

    Avez-vous une idée ?

    Bien cordialement,

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Un service tué par le système c'est "normal" et ca arrive assez fréquemment en fonction des ressources disponible.

    Ce qui n'est pas normal c'est qu'il ne redémarre pas. Avec un START_STICKY , il devrait se relancer automatiquement et repasser dans onStartCommand() avec un intent null
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Par défaut
    Bonjour,

    Merci de ta réponse, car voici une capture d'écran de mon téléphone (Galaxy S7) Chaque minutes je doit avoir une notification avec le service comme quoi mon PEt à gagné de l’expérience (0 au minimum) sauf que là ça fait plusieurs minutes et plus rien. Alors que le second service qui effectue la méthode Refresh fonctionnait bien.

    Nom : Screenshot_20170131-181208.png
Affichages : 1424
Taille : 242,6 Ko

    De plus il y a une notification au démarrage et arrêt du service que je n'ai pas eu alors si le service avait vraiment été arrêté la méthode onDestroy() aurait t'elle été appelée ?

    Car si ça se trouve le service se gèle simplement...

    Cordialement,

  4. #4
    Membre très actif Avatar de jmonga
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 175
    Par défaut
    S'il se plante le système t'ennvera une notification.

    S'il ne fait donc ton programme tourne en rond

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Il faut faire des traces dans ton service pour vérifier son état
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.d("MON SERVICE","MESSAGE");
    Et voir si il s’arrête et si il redémarre.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Par défaut
    Bonsoir

    Le problème est que cela se produit souvent 8 à 10 heures après le lancement de l'application donc je me vois mal laisser mon téléphone branché h24 sur android studio avec adb.

    Que faire ? ^^

    Cordialement

    Et non je n'ai pas la notification du ondestroy et pourtant je n'ai plus les notifications toutes les minutes

Discussions similaires

  1. Macro qui se lance toute seule, sans mon autorisation
    Par csempere dans le forum VBA Word
    Réponses: 5
    Dernier message: 06/06/2009, 09h10
  2. Réponses: 3
    Dernier message: 28/01/2008, 13h44
  3. [Swing] JPanel avec sa JScrollBar qui scrolle toute seule
    Par chcoust dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/11/2006, 14h37
  4. Réponses: 6
    Dernier message: 16/08/2006, 15h56
  5. pc portable qui reboot tout seul
    Par pepper18 dans le forum Windows XP
    Réponses: 23
    Dernier message: 24/06/2006, 14h51

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