Android停止了服务

时间:2015-02-17 20:49:06

标签: android service ondestroy

我正在运行且无限制的服务(没有活动,因为活动只是为了收集数据)似乎,如果消耗内存的程序运行,Android会停止服务(我使用JellySplash ...)) 。因此,只有在服务被系统销毁时才使用共享首选项,以便在再次创建服务时再次获取数据:

@Override
public void onDestroy() {

    if (stopSlf==false) {
        Editor editor = sharedpreferences.edit();
        String strKZ  = kennzeichen;
        editor.putString("strKZ", strKZ);
        editor.commit();
        stopSlf=true;
    }
    Log.e("Destroy", "Destroy");
    super.onDestroy();
}

这似乎有效,但正如你在LogCat中看到的那样,onDestroy在系统销毁服务之前没有被调用(我认为3个神秘的“D行”意味着服务被破坏了):

02-17 20:59:43.626: E/onCreate(19183): onCreate
02-17 20:59:43.636: I/Pref AnzAlarm(19183): No Pref data
02-17 20:59:43.651: I/Alarmmanager(19183): CancelAlarmMainActivity
02-17 21:00:04.096: I/Anzahl Alarme(19183): 1
02-17 21:00:15.026: I/Anzahl Alarme(19183): 2
02-17 21:00:25.286: D/ActivityThread(19835): handleBindApplication:com.fifteen
02-17 21:00:25.291: D/ActivityThread(19835): setTargetHeapUtilization:0.75
02-17 21:00:25.291: D/ActivityThread(19835): setTargetHeapMinFree:2097152
02-17 21:00:25.536: E/onCreate(19835): onCreate
02-17 21:00:25.576: I/Pref AnzAlarm(19835): No Pref data
02-17 21:00:25.611: I/Alarmmanager(19835): CancelAlarm
02-17 21:00:25.636: E/Stopself(19835): StopSelf
02-17 21:00:25.651: E/Destroy(19835): onDestroy

所以你可以看到,代码在“3行”之后调用onCreate,但是在3行之前没有“onDestroy” - 因此我的共享偏好永远不会存储。

为什么?

非常感谢!

安德烈亚斯

2 个答案:

答案 0 :(得分:0)

更改

if(stopSlf==false)

if(stopSlf)

应该有用。

答案 1 :(得分:0)

当一个Activity被系统或用户杀死时,你就不会收到onDestroy回调。一种防止这种情况发生的方法,您可以调用startForeground()stopForeground()方法让操作系统知道该服务必须尽可能长时间处于活动状态。如果您非常依赖于服务中的数据或者它未自动生成,那么您将需要在以后再次启动服务时进行的任何修改中不断保存它。