在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