在onStartCommand中传递的Intent为NULL的原因

rf4*_*f43 95 android android-intent android-service

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

此外,当系统重新启动服务时,该Intent.getAction()方法有时返回NULL ... Intent不仅仅是NULLgetAction()

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

UPDATE:马克·墨菲聊天后,他建议我返回START_REDELIVER_INTENTonStartCommand()回调在我的服务,而不是START_STICKY使整个意图在重新启动发送.

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

Eri*_*uff 46

我很惊讶没有讨论传入的标志.我将在日志中使用以下内容监视此情况:

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;
}
Run Code Online (Sandbox Code Playgroud)

更新:标志为0所以那里没有任何可操作的东西.我在那里留下了空检查,没有丢失功能.

编辑:好的,我在所有地方的START_STICKY文档中找到了它!"如果没有任何挂起的启动命令要传递给服务,它将使用null intent对象调用,因此您必须注意检查这一点."

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

  • 在Kotlin中,该意图被标记为非空,这会导致应用崩溃`onStartCommand(intent:Intent,flags:Int,startId:Int):Int {}的重写乐趣。 (3认同)