1

私はAndroidを初めて使用します。インターネット通信機能を処理するために(別のプロセスで)サービスを作成する必要があります。いくつかのブログをチェックしたところ、メッセンジャーを使用してアクティビティとサービスの間で(別のプロセスで)通信できることがわかりました)、

私の質問はここにあります。これまでのところ、私は次のようなことをしています:

private Messenger _commandReceiver = new Messenger(new CommandDispatcher());

public IBinder onBind(Intent intent) {
    return _commandReceiver.getBinder();
}

class CommandDispatcher extends Handler {
    public void handleMessage(Message message) {
    int command = data.getInt("command");
    Messenger activityMessenger = (Messenger) data.get("messenger");

    switch (command) {
                case Command.IS_AUTHENTICATED:
        break;
        ...
    }
}
}

しかし、onBind メソッドでコマンド変数とアクティビティ メッセンジャーを送信し、そこでイベント全体を処理するべきではないのはなぜですか。そうすれば、サービス メッセンジャーを完全に削除でき、通信コードがはるかに簡単になります。このようになります。

public IBinder onBind(Intent intent) {

    Bundle data = intent.getExtras();
    int command = data.getInt("command");
    Messenger activityMessenger = (Messenger) data.get("messenger");

    switch (command) {
                case Command.IS_AUTHENTICATED:
        break;
        ...
    }
}

とても簡単な質問かもしれませんが、どこにも答えが見つからなかったので、誰か助けていただければ幸いです

4

2 に答える 2

1

あなたの問題は公式文書で解決されるかもしれません。

グーグルが言ったように、

一度に複数のクライアントがサービスに接続できます。ただし、システムはサービスのonBind()メソッドを呼び出して IBinder を取得するのは、最初のクライアントがバインドされたときだけです。その後、システムは、再度呼び出すことなく、バインドする追加のクライアントに同じ IBinder を配信しますonBind()

バインドされたサービスで検索

私の提案はIBinder、さまざまな操作を異なるように登録方法を追加することです。

于 2013-10-09T08:24:45.860 に答える
0

Binder クラスの拡張 サービスが独自のアプリケーションに対してプライベートであり、クライアントと同じプロセスで実行される場合 (これは一般的です)、Binder クラスを拡張し、onBind() からそのインスタンスを返すことによって、インターフェイスを作成する必要があります。クライアントは Binder を受け取り、それを使用して、Binder 実装または Service で使用可能な public メソッドに直接アクセスできます。

これは、サービスが独自のアプリケーションの単なるバックグラウンド ワーカーである場合に推奨される手法です。この方法でインターフェイスを作成しない唯一の理由は、サービスが他のアプリケーションによって、または別のプロセスで使用されるためです。

Messenger の使用インターフェイスが異なるプロセス間で機能する必要がある場合は、Messenger を使用してサービス用のインターフェイスを作成できます。このように、サービスはさまざまなタイプの Message オブジェクトに応答する Handler を定義します。この Handler は、IBinder をクライアントと共有できる Messenger の基礎となり、クライアントが Message オブジェクトを使用してコマンドをサービスに送信できるようにします。さらに、サービスがメッセージを送り返すことができるように、クライアントは独自の Messenger を定義できます。

http://developer.android.com/guide/components/bound-services.html

于 2013-02-07T13:39:53.213 に答える