2

ローカル サービスにバインドするアクティビティを開発しています (アクティビティの onCreate 内):

bindService(new Intent(this, CommandService.class), svcConn, BIND_AUTO_CREATE);  

ライフサイクル メソッドで IBinder を介してメソッドを呼び出せるようにしたいと考えていますが、これらのメソッドの前に onServiceConnected が呼び出されていることを確認できません。接続が確立されるとメソッド呼び出し (コマンド パターン) が実行されるように、ServiceConnection 実装に並べ替えのキューを追加することでこれを処理することを考えています。

私の質問は次のとおりです。

  1. これはばかげていますか、より良い方法はありますか?:)
  2. ServiceConnection コールバックの実行に使用されるスレッドの仕様はありますか? さらに言えば、キュ​​ーのデータ構造の同期について心配する必要はありますか?

編集 - 次のようなもの:

public void onServiceConnected(ComponentName name, IBinder service) {
    dispatchService = (DispatchAsync)service;

    for(ExecutionTask task : queue){
        dispatchService.execute(task.getCommand(), task);
    }
}
4

1 に答える 1

0

ServiceConnection コールバックの実行に使用されるスレッドの仕様はありますか?

他のコールバックと同様に、メイン アプリケーション スレッドで呼び出す必要があります。

さらに言えば、キュ​​ーのデータ構造の同期について心配する必要はありますか?

これは、オブジェクトをキューに追加する場所によって異なります。それがメイン アプリケーション スレッドのみからのものである場合、競合は発生しないはずです。

于 2010-05-10T23:56:52.330 に答える