6

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

onStartCommand(...) メソッドはさまざまな非同期スレッドから呼び出すことができるため、これはスレッドセーフなソリューションではない可能性があることに気付きました。問題は、このカウンター変数へのアクセスを同期ブロックでラップする必要があるのか​​、それとも onStartCommand(...) の IntentService 実装がこれを処理するのかということです。

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

4

1 に答える 1

21

onStartCommand(...)メソッドはさまざまな非同期スレッドから呼び出すことができるため、これはスレッドセーフなソリューションではない可能性があることに気づきました。

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

于 2012-06-24T13:29:31.220 に答える