Android服务onStartCommand()在应用程序部队关闭时触发
问题描述:
我从Activity
开始Service
,然后我将Activity绑定到它。 如果我尝试强制关闭任务管理器中的应用程序,将调用Service onStartCommand()
方法,并调用NullPointerException。我不明白为什么onStartCommand()被调用。Android服务onStartCommand()在应用程序部队关闭时触发
该服务刚onStartCommand()重写现在:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle bundle = intent.getExtras(); //This is line 24
//some stuff to get strings from bundle
return super.onStartCommand(intent, flags, startId);
}
例外:
07-16 14:49:02.190: E/AndroidRuntime(24607): FATAL EXCEPTION: main
07-16 14:49:02.190: E/AndroidRuntime(24607): java.lang.RuntimeException: Unable to start service [email protected] with null: java.lang.NullPointerException
07-16 14:49:02.190: E/AndroidRuntime(24607): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2782)
07-16 14:49:02.190: E/AndroidRuntime(24607): at android.app.ActivityThread.access$2000(ActivityThread.java:152)
07-16 14:49:02.190: E/AndroidRuntime(24607): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1385)
07-16 14:49:02.190: E/AndroidRuntime(24607): at android.os.Handler.dispatchMessage(Handler.java:99)
07-16 14:49:02.190: E/AndroidRuntime(24607): at android.os.Looper.loop(Looper.java:137)
07-16 14:49:02.190: E/AndroidRuntime(24607): at android.app.ActivityThread.main(ActivityThread.java:5328)
07-16 14:49:02.190: E/AndroidRuntime(24607): at java.lang.reflect.Method.invokeNative(Native Method)
07-16 14:49:02.190: E/AndroidRuntime(24607): at java.lang.reflect.Method.invoke(Method.java:511)
07-16 14:49:02.190: E/AndroidRuntime(24607): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
07-16 14:49:02.190: E/AndroidRuntime(24607): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
07-16 14:49:02.190: E/AndroidRuntime(24607): at dalvik.system.NativeStart.main(Native Method)
07-16 14:49:02.190: E/AndroidRuntime(24607): Caused by: java.lang.NullPointerException
07-16 14:49:02.190: E/AndroidRuntime(24607): at com.app.GameService.onStartCommand(GameService.java:24)
07-16 14:49:02.190: E/AndroidRuntime(24607): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2765)
07-16 14:49:02.190: E/AndroidRuntime(24607): ... 10 more
答
你可以使用某事像这样
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle bundle = getIntent.getExtras();
if (bundle!=null) {
Bundle bundle = intent.getExtras();
}
} else {
Log.i("Log", "Bundle is null");
}
}
+0
'getIntent()'没有为服务定义。我解决了检查'intent!= null',但我不明白为什么onStartCommand()被调用。 – Emanuele
答
可能回国服务。 onStartCommand()中的start_not_sticky就是你想要的。我不知道你的情况,只是给它一个镜头。
这将有助于更好地理解整理/重新启动该服务的diffeent模式 - http://developer.android.com/reference/android/app/Service.html#START_NOT_STICKY
你有你的活动/服务的onDestroy()的任何代码? –
不,绝对。 – Emanuele