有一项服务必须处理其Intent
中Handler
的数据
下面的代码段:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle bundle = intent.getExtras();
Message msg = new Message();
msg.setData(bundle);
mServiceHadler.sendMessage(msg);
return START_STICKY;
}
在调用Intent以启动服务并从概览屏幕中移除APK后,由于NullPointerException
null
来了,因此获得Intent
。
java.lang.RuntimeException: Unable to start service com.example.intentservicetest01.ServiceExt@750547a with null: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4021)
at android.app.ActivityThread.access$2400(ActivityThread.java:209)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1841)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7014)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:731)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621)
是否有规范明确(不添加条件null
检查)方式来处理null
Intent
?
如果服务将在另一个进程中启动,这个回调方法(Service.onStartCommand
)是否会存在?任何合适的想法都值得赞赏。
答案 0 :(得分:0)
尝试停止service
这样的
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
stopSelf();
}
或以这种方式启动
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// your code
return START_REDELIVER_INTENT;
}
答案 1 :(得分:0)
我喜欢像这样编码,使用@Nullable Annotation。
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand: " + intent.getCategories());
return super.onStartCommand(intent, flags, startId);
}
如果使用了intent但未选中,则会出现如下警告: warning info 那么你可以轻松地做到。