web-dev-qa-db-ja.com

android)のアクティビティへのサービスコールバック

バックグラウンドサービスを実行していて、サービスと対話するクライアントがあります。

クライアントが何らかの操作を要求すると、サービスはそれを実行し、結果をアクティビティ(クライアント)に送り返す必要があります。

アクティビティでサービスメソッドを呼び出す方法を知っており、コールバックを使用して、やりたいことを実現できます。しかし、Apiデモ(リモートサービス)で提供されているコールバックメカニズムとコード例を理解できません。

誰かがこのサービスコールバックがどのように機能するかを説明できますか?または、より単純なメカニズムを使用して達成可能なもの。

13
Ambika

これが流れです
サービスを呼び出すインテントを作成します。 startService()またはBindService()のいずれかをBIND_AUTO_CREATE

サービスが結合されると、IBinderインターフェイスであるクライアントと通信するためのトンネルが作成されます。これはAIDLインターフェースの実装で使用され、IBinderを返します。

private final MyServiceInterface.Stub mBinder = new MyServiceInterface.Stub() {
    public int getNumber() {
        return new Random().nextInt(100);
    }
};

public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Service OnBind()", Toast.LENGTH_LONG).show();
    return mBinder;
}

クライアントで作成したmBinderが返されると、ServiceConnectionがコールバックされ、これを使用してサービスインターフェイスを取得します。

           mConnection = new ServiceConnection() {

        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub

        }

        public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub

            mService = MyServiceInterface.Stub.asInterface(service);


    };

これで、mServiceインターフェースを取得して、そこからサービスを呼び出して取得できるようになりました。

5
George Nguyen