Android IntentService 以空意图触发

Posted

技术标签:

【中文标题】Android IntentService 以空意图触发【英文标题】:Android IntentService triggered with null intent 【发布时间】:2016-10-23 23:24:45 【问题描述】:

我在 Crashlytics 中看到了崩溃:

致命异常:java.lang.NullPointerException:尝试调用 虚拟方法'int android.content.Intent.getIntExtra(java.lang.String, int)' 为空 对象引用 在 com.myapp.APKOfferQueueManagerIntentService.onHandleIntent(SourceFile:71) 在 android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.os.HandlerThread.run(HandlerThread.java:61)

IntentService 怎么会被一个空意图触发?

【问题讨论】:

你在服务中调用过onStartCommand吗? 不,我没有添加 onStartCommand。 【参考方案1】:

IntentService 可能像所有其他服务一样被停止,但它会被“系统”重新启动,直到onHandleIntent() 完成其工作。在这种情况下,documentation 表示 intent 参数

...如果服务在其进程消失后重新启动,则可能为 null

要始终获取原始Intent 作为参数,请使用

setIntentRedelivery(true);

IntentService的构造函数中。

还要注意

如果已发送多个 Intent,则保证仅重新发送最近的一个。

【讨论】:

这听起来像是解决方案。有没有一种方法可以模拟一个 intentService 被突然杀死然后再次调用?我想验证解决方案。 @JY2k - 我会尝试类似 task killer app 的东西 - 或者这个 SO post by Xavi Gil 可能会有用

以上是关于Android IntentService 以空意图触发的主要内容,如果未能解决你的问题,请参考以下文章

android 中IntentService的使用场景

Android 多线程之IntentService 完全详解

Android IntentService

Android Training - 使用IntentService运行任务(Lesson 2 - 发送任务给IntentService)

Android - 多次运行 IntentService

Android面试收集录9 IntentService详解