使用START_STICKY的Android服务在杀死应用时崩溃

gan*_*v09 7 android android-service android-lifecycle

这是我Service从一个按钮点击调用Activity.如果我ActivityService运行时向左滑动它会崩溃.我也尝试通过放入android:process=":remote"清单在单独的过程中运行它,但它仍然是相同的.

@Override
public void onCreate(){
    super.onCreate();
    Log.d("Service", "Creating");
}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    return null;
}

@Override
public int onStartCommand (Intent intent, int flags, int startId)
{
    super.onStartCommand(intent, flags, startId);

    Log.d("Started", "Service");

    type = intent.getIntExtra("Type",-1);
    mode = intent.getIntExtra("Mode",-1);
    rank = intent.getIntExtra("Rank", -1);
    latitude = intent.getDoubleExtra("Lat", -1.0);
    longitude = intent.getDoubleExtra("Long", -1.0);
    startTime = intent.getLongExtra("Start", 0);
    endTime = intent.getLongExtra("End", 0);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

  java.lang.RuntimeException: Unable to start service com.routofy.routofytest.MyLocationService@374afe93 with null: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2913)
        at android.app.ActivityThread.access$2100(ActivityThread.java:148)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5312)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference
        at com.routofy.routofytest.MyLocationService.onStartCommand(MyLocationService.java:89)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2896)
at android.app.ActivityThread.access$2100(ActivityThread.java:148)
at    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Run Code Online (Sandbox Code Playgroud)

这是null指针type = intent.getIntExtra("Type",-1);

我知道杀死这个应用程序正在扼杀这个过程,而Intent这种情况Service正在逐渐消失null.但是如何处理这样的情况即使Activity被杀Intent也会被移交给Service?我希望服务完全独立Activity.另外我运行它像:

Intent pickIntent = new Intent(getApplicationContext(),MyLocationService.class);
Run Code Online (Sandbox Code Playgroud)

Oni*_*nik 5

我了解到,终止该应用程序正在终止该进程,并且该服务获得的意图将是无效的。

既然您尚未发布返回值,onStartCommand()我相信这START_STICKY意味着服务是通过null Intent传入的系统重新创建的。

但是,即使活动被杀死,如何处理这种情况也要交给服务。

只需返回START_REDELIVER_INTENT标志,这意味着:

“如果系统在onStartCommand()返回后终止服务,请重新创建服务并onStartCommand()以传递给服务的最后意图进行调用。”