web-dev-qa-db-ja.com

渡されたIntentがonStartCommandでNULLになる理由

システムがSTART_STICKYなどのフラグを介してサービスを再起動する以外に、onStartCommand(Intent, int, int)に渡されるIntentがNULLになる他の理由はありますか?

また、システムによってサービスが再起動されると、Intent.getAction()メソッドはNULL ...を返すことがあります。意図は単にgetAction()だけではありません

here も尋ねましたが、まだ回答を受け取っていません。

[〜#〜] update [〜#〜]:マークマーフィーとチャットした後、彼はonStartCommand()コールバックでSTART_REDELIVER_INTENTを返すことを提案しましたSTART_STICKYの代わりに私のサービスで、再起動後にインテント全体が送信されるようにします。

サービスが何かを実行しようとしていた場合、その何かの最中にサービスが再起動されることを心配していたため、最初はこれをしませんでした...私はそれが私が責任を負う必要があるロジックだと思います:)

92
rf43

入ってくる旗についての議論がないことに驚いています。ログでこれを次のように監視します。

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であったため、アクション可能なものはありませんでした。機能を失うことなく、nullチェックを残しました。

編集:OK、すべての場所のSTART_STICKYのドキュメントで見つけました! 「サービスに配信される保留中の開始コマンドがない場合は、nullインテントオブジェクトで呼び出されるため、これを確認するよう注意する必要があります。」

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

46
Eric Woodruff