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,