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:
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,