2012-06-24 16 views
6

私はIntentServiceクラスを、複雑なアプリケーション(アクティビティ、スレッド、その他のサービス)のさまざまな場所から起動できます。私はサービスが何回呼び出されたのかのカウンタを保持したいと思います。 IntentServiceクラス内のprivate int変数を使用して、それを追跡します。私はonStartCommand(...)メソッドからインクリメントします。IntentServiceのonStartCommand(..)メソッドはスレッドセーフですか?

さまざまな非同期スレッドからonStartCommand(...)メソッドを呼び出すことができるので、スレッドセーフな解決策ではない可能性があります。だから問題は、同期ブロック内でこのカウンタ変数へのアクセスをラップする必要があるか、onStartCommand(...)のIntentService実装がこれを処理するのですか?

メモとして、変数をonHandleIntent(...)から安全にインクリメントできることはわかっていますが、実行されたインテントではなく実際のリクエストでカウントする必要があります。

答えて

14

さまざまな非同期スレッドからonStartCommand(...)メソッドを呼び出すことができるので、スレッドセーフな解決策ではない可能性があります。

onStartCommand()は常にどのサービスのメインアプリケーションスレッドでも呼び出されます。 onStartCommand()と同時に2つのスレッドで呼び出すことはできません。

+0

毎日新しいことを学ぶ。ありがとう! –

+0

それではスレッドセーフではありませんか? – digitizedx

+0

@digitizedx:**何が**スレッドセーフではないですか? 'onStartCommand()'は、メインアプリケーションスレッドでのみ呼び出されるためです。 – CommonsWare

関連する問題