我正在运行且无限制的服务(没有活动,因为活动只是为了收集数据)似乎,如果消耗内存的程序运行,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” - 因此我的共享偏好永远不会存储。
为什么?
非常感谢!
安德烈亚斯
答案 0 :(得分:0)
更改
if(stopSlf==false)
到
if(stopSlf)
应该有用。
答案 1 :(得分:0)
当一个Activity被系统或用户杀死时,你就不会收到onDestroy回调。一种防止这种情况发生的方法,您可以调用startForeground()
和stopForeground()
方法让操作系统知道该服务必须尽可能长时间处于活动状态。如果您非常依赖于服务中的数据或者它未自动生成,那么您将需要在以后再次启动服务时进行的任何修改中不断保存它。