渡されたインテントがonStartCommandでNULLになる理由


100

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

また、サービスがシステムによって再起動されると、Intent.getAction()メソッドはNULLを返します...時々。意図はNULLだけではないgetAction()

私もここで尋ねましたが、まだ返事がていません。

更新:Mark Murphyとチャットした後、再起動後にインテント全体が送信されるようにする代わりに、サービスSTART_REDELIVER_INTENTonStartCommand()コールバックで戻ることを提案しましたSTART_STICKY

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


16
回答で質問を編集するのではなく、回答を追加して承認してください。そうすれば、質問が未回答の質問のセットに表示されなくなります-ありがとう。
デールウィルソン

2
同様の問題を持つ誰かのためのちょうどメモ。私はエラーを取得通常時にことがわかっintentているnull上にonStartCommand()、それはこの前LogCatに表示されている他のいくつかのエラーが原因です。理由はわかりませんが、これは私が観察したものであり、見落としがちです。
Piotr Chojnacki 2013年

2
@DaleWilson私はそうしますが、この質問は本当に解決されていません。インテントがnullである理由、またはSTART_REDELIVER_INTENTを使用せずにnullインテントを回避する方法に関する明確な回答を受け取るまで(これは後で学習しましたが、一部の人々の問題を解決するため、編集を残しました)回答はお受けできません。
rf43

@Mosquito具体的には何がエラーをスローしているかに気づきましたか?
rf43

1
@DDoSAttack本当に重要ではありません。私の場合、それは例えばNullPointerException、アクティビティのどこかにありました。後でそれはいくつかの他のエラーでした。しかし、どちらの場合でも、私のスタックトレースは、このエラーが発生しているときに実行されていた私のサービスがあなたの場合と同じでintentあったことを示しましたnull。スタックトレースを上にスクロールすることに決めたとき、何が問題なのかをかなり長い間考えていましたが、上部のどこかに本当のエラーがあるように見えました。これを解いた後、null intent消えたものも。
Piotr Chojnacki 2013年

回答:


50

着信フラグについての議論がないことに驚いています。私はこれをログで次のように監視します:

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


6
Kotlinでは、インテントはnot-nullとしてマークされ、アプリがクラッシュしますoverride fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
Muhammad Naderi '10

@MuhammadNaderiあなたはただ意図することができますIntent?。私のために働いた。しかしもちろん、nullインテントを正しく処理する必要があります。
Patrick Boos

@PatrickBoos But then of course you need to correctly handle null intent; どういう意味ですか?!どうやって?ありがとう。
Dr.jacky

私はあなたのコードだけでonStartCommand(intent: Intent?, ...)それがうまくいくようにしました。そして、やらないでくださいintent!!。インテントがnullかどうかを正しく確認してください。
Patrick Boos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.