在onStartCommand中传递Intent的原因是NULL

除了系统通过诸如START_STICKY的标志重新启动服务之外,是否有其他原因传递给onStartCommand(Intent, int, int)将为NULL?

此外,当系统重新启动服务时, Intent.getAction()方法有时会返回NULL …。 意图不是NULL只是getAction()

我也在这里问过,但还没有得到答案。

更新 :在与Mark Murphy聊天后,他build议我在服务中的onStartCommand()callback中返回START_REDELIVER_INTENT ,而不是START_STICKY以便重新启动后发送整个意图。

我最初并没有这样做,因为我担心如果服务试图做一些事情,那么在这个服务重新启动的过程中,它会认识到它开始做这个事情吗? 我想这是逻辑我将需要负责:)

我很惊讶没有讨论传入的标志。 我将在日志中使用以下方式来监视它:

 if (null == intent || null == intent.getAction ()) { String source = null == intent ? "intent" : "action"; Log.e (TAG, source + " was null, flags=" + flags + " bits=" + Integer.toBinaryString (flags)); return START_STICKY; } 

更新:标志为0,所以没有任何可操作的地方。 我已经在那里留下了空的检查,没有function的损失。

编辑:好吧,我发现它在所有地方的START_STICKY文件! “如果没有任何挂起的启动命令被传递给服务,它将被调用一个空的intent对象,所以你必须小心检查这一点。

http://developer.android.com/reference/android/app/Service.html