3

バインディングを介して別のサービスからの参照を使用する必要がある IntentService があります。

public class BaseIntentService extends IntentService implements ServiceConnection {

    protected NetworkApi network;

    public BaseIntentService() {
        super("BaseIntentService");
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        network = ((NetworkApiBinder) service).getApi();
        // never be invoked
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
    }

    @Override
    public void onCreate() {
        super.onCreate();
        bindService(new Intent(this, NetworkApi.impl), this, BIND_AUTO_CREATE);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unbindService(this);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // network always null!!!
    }
}

しかし、この onServiceConnected のようなバインディングを使用しているときは、決して呼び出されません。IntentService がバインド パターン用に設計されていないことは知っていますが、そのようなタスクに共通の解決策があるのでしょうか?

ありがとう!

4

1 に答える 1

11

しかし、この onServiceConnected のようなバインディングを使用しているときは呼び出されません

これはIntentService、バインド要求が開始される前にあなたが破棄されるためです。Anは、未処理のコマンドがすべて完了するIntentServiceと、自動的に破棄されます。onHandleIntent()

しかし、そのようなタスクには共通の解決策があるかもしれません

2 つのサービスを使用しないでください。を取り除き、IntentServiceそのロジックを他のサービスに移動します。

于 2013-03-01T14:22:43.900 に答える