2017-02-14 12 views
0

ステップ#1。インタフェースServiceConnectionの実装

public class ServiceBinding<T extends ParentService<T>> implements ServiceConnection { 
    public T bindedService; 

    @Override 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     // Warning: Type safety: Unchecked cast from IBinder to ChatService<T>.LocalBinder 
     bindedService = ((T.LocalBinder) service).getService(); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
    } 
} 

ステップ#2:は、インタフェースServiceConnectionを実装するために必要。次のようにはその後親サービスは次のようになります。

public abstract class ParentService<T extends ParentService<T>> extends Service { 
    public class LocalBinder extends Binder { 
     public T getService() { 
      return (T) T.this; // Warning: Unchecked cast from ChatService<T> to T 
     } 
    }; 
} 

質問:は、このようなソリューションが許容できますか?

ServiceConnectionはどのように正しく実装されるべきですか?

答えて

0

あなたはこのように実装することができます -

private ServiceConnection mConnection = new ServiceConnection() { 

    @Override 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     LocalBinder binder = (LocalBinder) service; 
     service = binder.getService(); 
     boundVal = true; 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
     boundVal = false; 
    } 
}; 

boundValは 'unbindservice' のトリガーです。パラメータとしてconnectionを指定してboundvalを渡します。

onServiceConnected()およびonServiceDisconnected()は、一度クライアントとサーバー間の接続が確立または切断されると呼び出されます。 onServiceConnected()メソッドの場合は、クライアントがサービスと対話するために必要な情報を含むIBinderオブジェクトが渡されます。 乾杯!

+0

コードの重複を避けるために、バインディングの一般化された実装を行う方法の問題。 – DukeSpontaneous

関連する問題