IntentService和绑定模式

aim*_*aim 3 android

我有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!!!
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用像这样的绑定时,onServiceConnected永远不会被调用.我知道IntentService不是为绑定模式而设计的,但是对于这样的任务可能有一个共同的解决方案吗?

谢谢!

Com*_*are 11

但是当我使用像这样的绑定时,onServiceConnected永远不会被调用

那是因为IntentService在绑定请求开始之前你就被销毁了.一个IntentService时,会自动销毁onHandleIntent()完成所有未完成的命令.

但可能有这种任务的共同解决方案

没有两项服务.摆脱IntentService并将其逻辑移到其他服务中.

  • @Kushal:因为`IntentService`意味着短暂的生命(几秒钟到一分钟左右).当`onHandleIntent()`完成所有未完成的命令时,会自动销毁`IntentService`. (2认同)