应用程序关闭时应用程序启动新服务

时间:2016-03-12 15:37:36

标签: android android-service

我有一个带有服务的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;
}

但是我只需按下按钮即可启动我的服务。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在onStartCommand中返回START_NOT_STICKY而不是START_STICKY

如果返回START_STICKY,系统将在杀死后尝试重新创建服务。

如果返回START_NOT_STICKY,系统将尝试在杀死后重新创建服务。