我有一个带有服务的Android应用程序,即使只有用户在应用程序中设置标志,关闭应用程序也必须跟踪用户的位置。所以我在用户点击按钮后开始使用代码服务,并在用以下代码再次点击它时停止
alarm.changeAlarmStatus();
if(alarm.getAlarmStatus()) {
SharedPreferences.Editor ed = alarmPreferences.edit();
ed.putFloat("MARKER_LATITUDE", (float) theMarker.getPosition().latitude);
ed.putFloat("MARKER_LONGITUDE", (float) theMarker.getPosition().longitude);
ed.commit();
startService(myIntent);
}
else{
stopService(myIntent);
}
似乎工作正常。服务工作并做它应该做的事情。但问题是如果我通过任务管理器关闭应用程序,我在logcat中看到Service再次启动(但只有在服务已经工作的情况下)并且它会导致nullPointerException,因为intent为null。您可以在此代码中看到它发生的原因
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Bundle bundle = intent.getExtras();
alarm = (Alarm) bundle.getSerializable("alarm");
Log.d("service","On Start Command is called ");
serviceIntent = intent;
return START_STICKY;
}
但是我只需按下按钮即可启动我的服务。有谁知道如何解决这个问题?
答案 0 :(得分:2)
在onStartCommand中返回START_NOT_STICKY而不是START_STICKY。
如果返回START_STICKY,系统将在杀死后尝试重新创建服务。
如果返回START_NOT_STICKY,系统将不尝试在杀死后重新创建服务。