0

サービスとリモート インターフェイスを使用してアプリケーションを開発しています。

アクティビティ全体でリモート インターフェイスの参照を渡すことについて質問があります。

最初のアクティビティでは、使用するインターフェイスへの参照を取得するために、サービスをアクティビティにバインドします

private ServiceConnection mConnection = new ServiceConnection() {

        @Override
        public void onServiceConnected(ComponentName arg0, IBinder service) {
            x = X.Stub.asInterface(service);

        }

        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            // TODO Auto-generated method stub

        }

    };

x は私のインターフェースへの参照です。ここで、別のアクティビティからこのインターフェイスにアクセスしたいと思います.2つの方法がありますが、どちらが「適切な」方法であるかわかりません:

  • 新しいアクティビティを呼び出すときに意図的に x を渡す
  • this.bindService(new Intent(y.this,z.class), mConnection, Context.BIND_AUTO_CREATE);新しいアクティビティの onCreate() をやり直す

私に何をするようアドバイスしてくれますか?

4

1 に答える 1

1

サービスとリモート インターフェイスを使用してアプリケーションを開発しています。

それが必要だと確信していますか?アクティビティとサービスが同じアプリケーション内にある場合は、AIDL を使用してそれらにアクセスしないでください。価値のないオーバーヘッドが追加されるためです。サードパーティ アプリケーションの接続先として AIDL もサポートしている場合でも、代わりにローカル バインディング パターンを使用してください。

新しいアクティビティを呼び出すときに意図的に x を渡す

これが可能か安全かは疑問です。

this.bindService(new Intent(y.this,z.class), mConnection, Context.BIND_AUTO_CREATE); をやり直します。新しいアクティビティの onCreate() で

これが唯一の選択肢だと思います。ローカル サービスの場合、このようなバインド操作はかなり安価です。そのため、AIDL ではなく、アプリケーション内のサービスにローカル バインディング パターンを使用することをお勧めします。

于 2010-05-13T10:46:42.200 に答える