2013-02-12 21 views
13

IntentServiceの使い方について少し混乱しています。Android IntentServiceに複数のインテントをキューイングする方法

  1. ドキュメントによると、IntentServiceは送信されたすべてのインテントをキューに入れ、一度に1つずつ処理します。意図は

が、私はかなり確信しているキューにメッセージとして送信ONSTART()を呼び出し、

  • 私はcode of IntentServiceで見ていたし、私はonStartCommand()が意図を受け取ることを見I文中でonStartCommand()がシステムによって一度だけ呼び出されます。startService()の2回発行すると、2番目の呼び出しでonStartCommand()が呼び出されることはありません。
    私はここで間違っているかもしれません。私はこのドキュメントを探していて、見つけられないようです。
    これは、onStartCommand()を介してIntentServiceに多くのインテントをキューイングできるという前の概念と矛盾します。

    ここで助けが必要ですが、IntentServiceに複数のインテントをキューイングするにはどうすればよいですか?

    私は2つだけのオプションを参照してください。をバイパス

    • だけ異なる意図で毎回STARTSERVICE()を呼び出す

    • コールを直接ONSTART()またはonStartCommand()を( startService())

  • 答えて

    13

    IntentContext.startService()で送信し、インテントをonHandleIntent()にお送りします。

    startService()を初めて呼び出すと、サービスのonStartCommand()が呼び出されます。それをコンストラクタと考えてください。その後のstartService()の呼び出しは、既に実行されているため、サービスを再起動する必要はありません。彼らはサービスのonHandleIntent()への呼び出しを増やすだけです。

    +1

    IntentServiceのコード(私の質問のリンクを参照してください)によると、ハンドラがそれを行うことができるのは、onHandleIntent()を直接呼び出すことは不可能であることがわかります。システムは、onStart()またはonStartCommand()のいずれかを呼び出さなければなりません。 – ilomambo

    +2

    はい、それは正しいです。あなたがする必要があるのは、 'startService()'を呼び出して、サービス内で 'onHandleIntent()'を実装することだけです。システムは、実際にサービスを開始する方法と時期を決めることを含め、他のすべてのことを行います。 –

    +0

    Sidenote:これは、* onStart()*をオーバーライドしてインテントのキューイングを傍受できることを意味しますか? (* onStart()*はAPIとして推奨されていないので、原則としてそれは悪いと思う?) – ilomambo

    関連する問題