log
D/AndroidRuntime(19002): Shutting down VM
W/dalvikvm(19002): threadid=1: thread exiting with uncaught exception (group=0xb24c4fb0)
E/AndroidRuntime(19002): FATAL EXCEPTION: main
E/AndroidRuntime(19002): java.lang.RuntimeException: Unable to start service com.hsae.auto.datt.radio.RadioService@b2842f20 with null: java.lang.NullPointerException
E/AndroidRuntime(19002): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2673)
E/AndroidRuntime(19002): at android.app.ActivityThread.access$1900(ActivityThread.java:141)
E/AndroidRuntime(19002): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
E/AndroidRuntime(19002): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(19002): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(19002): at android.app.ActivityThread.main(ActivityThread.java:5041)
E/AndroidRuntime(19002): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(19002): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(19002): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:800)
E/AndroidRuntime(19002): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
E/AndroidRuntime(19002): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(19002): Caused by: java.lang.NullPointerException
E/AndroidRuntime(19002): at com.hsae.auto.datt.radio.RadioService.onStartCommand(RadioService.java:101)
E/AndroidRuntime(19002): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2656)
E/AndroidRuntime(19002): ... 10 more
onStartCommand的intent为空才,报NullPointException
原因:
intent的参数是null,原因是这个intent参数是通过startService(Intent)方法所传递过来的,但是如果Service在你的进程退出后有可能被系统自动重启,这个时候intent就会是null.
解决方法:
所以在使用intent前需要判断一下是否为空。
还有另外一种解决方法:
如果实现 onStartCommand去调度异步工作或者其他的线程,有必要设置START_FLAG_REDELIVERY让系统重发intent到service以便service被killed后不会丢失intent数据。
Java代码
return super.onStartCommand(intent, Service.START_REDELIVER_INTENT, startId);