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] Arrêt à tout moment


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] Arrêt à tout moment
    Bonjour,

    J'ai une application en cours que je fais à titre personnel est qui est un RPG version mobile dans lequel vous incarnez un personnage, pour gagner de l'expérience et monter de niveau vous devez larcher, chaque pas = 1 point d'experience.

    J'ai donc crée un service qui s'en occupe dont le voici mais qui se stop à tout moment alors que je souhaite qu'il tourne en arrière plan, j'ai pourtant suivit un livre que j'ai acheté sur les services Android :

    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
    package com.caranille.caranillemonsters.Kernel;
     
    import android.app.Notification;
    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.widget.Toast;
     
    import java.util.Random;
     
    public class TrainingService extends Service implements SensorEventListener {
     
        //Ajouts des classes
        private SensorManager sensorManager;
     
        //Variables
        private int distanceTotal;
        private int baseExperience = 1000;
        private int experienceRequired;
        private int timeItem = 0;
        private int rarityValue;
     
        private Sensor senStepDetector;
     
        public int onStartCommand(Intent intent, int flags, int startId) {
     
            new Thread(new Runnable() {
                @Override
                public void run() {
                    serviceThread();
                }
            }).run();
     
            return Service.START_STICKY;
        }
     
        public void serviceThread()
        {
            Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
     
            sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);
            senStepDetector = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
     
            registerSensors();
        }
     
        @Override
        public void onDestroy() {
            Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
        }
     
        @Override
        public IBinder onBind(Intent arg0) {
            return null;
        }
     
        private void registerSensors()
        {
            sensorManager.registerListener(this, senStepDetector, SensorManager.SENSOR_DELAY_NORMAL);
        }
     
     
        @Override
        public void onSensorChanged(SensorEvent event) {
            Sensor sensor = event.sensor;
     
            switch (event.sensor.getType()) {
                case Sensor.TYPE_STEP_DETECTOR:
                    updateCharacter();
                    break;
            }
        }
     
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
     
        }
     
        public void updateCharacter()
        {
    		//On ajoute un point d'experience
    		Mon code...
        }
    }
    Ce service est lancé depuis une activé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //On lance le service Podomètre
            startService(new Intent(CharacterActivity.this, TrainingService.class));
    Si vous avez une idée je serais preneur car à tout moment j'ai le Toast qui m'indique "service done"

    Bien cordialement,

  2. #2
    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,

    Je me permets de relancer mon message car je ne comprends toujours pas pourquoi mon Thread fait dans le service se ferme tout seul...

    J'ai mit une rustine un peu moche qui fait que dès que la méthode onDestroy() se lance elle relance elle même onstart:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        @Override
        public void onDestroy() {
            Intent intent = new Intent();
            onStartCommand(intent, 0, 0);
        }
    ça fonctionne mais c'est pas propre du tout

    Bien cordialement,

  3. #3
    Membre expérimenté Avatar de Kazh Du
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 152
    Par défaut
    Je ne suis pas spécialiste dans ce domaine, mais à tout hasard, je dirais que ton Thread ne contient pas de boucle donc il s'arrête après son exécution.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Par défaut
    Depuis Android 6 Google a introduit Doze qui a pour objectif de réduire la consommation batterie.

    Au début c'était gentil mais avec Android 8 ils ont rendu le truc très stricte.

    En gros au bout de 30s de pause ton appli s'arrête et plus rien ne tournera.

    Seul moyen, prendre en compte cela en suivant la check list suivante : https://developer.android.com/traini...e/doze-standby

    Pour ton cas, je pense un foreground service est la piste à suivre.

    Si ton livre date de quelques années ça explique le pourquoi ça marche plus.

  5. #5
    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
    Citation Envoyé par UbuntuMan Voir le message
    Depuis Android 6 Google a introduit Doze qui a pour objectif de réduire la consommation batterie.

    Au début c'était gentil mais avec Android 8 ils ont rendu le truc très stricte.

    En gros au bout de 30s de pause ton appli s'arrête et plus rien ne tournera.

    Seul moyen, prendre en compte cela en suivant la check list suivante : https://developer.android.com/traini...e/doze-standby

    Pour ton cas, je pense un foreground service est la piste à suivre.

    Si ton livre date de quelques années ça explique le pourquoi ça marche plus.
    Bonjour,

    Merci de votre aide, je comprends donc mieux, c'est un livre sur Android 7 ce qui s'explique ^^

    Les Forground service c'est un peu comme VLC sur Android avec le bandeau tout en haut avec Last Play ou Pause et Next et où le titre s'affiche ?

    Bien cordialement,

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/07/2018, 23h11
  2. [JTable]Définir à tout moment le background d'une cellule
    Par krolineeee dans le forum Composants
    Réponses: 10
    Dernier message: 11/09/2006, 17h35
  3. Ordinateur qui s'arrête tout seul
    Par tesla dans le forum Ordinateurs
    Réponses: 7
    Dernier message: 13/03/2006, 17h14
  4. Réponses: 8
    Dernier message: 19/01/2006, 15h00
  5. Ma base s'arrête toute seule
    Par Mcpanch dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/01/2006, 15h57

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