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 Training - 使用IntentService运行任务(Lesson 2 - 发送任务给IntentService)