Unbind后Android服务关闭

时间:2015-10-21 19:38:21

标签: java android android-service android-service-binding

我有一个需要从活动中获取一些输入的服务。为了让他们进行交流,我将活动绑定到我的服务,沟通很有效。但是,一旦活动关闭并从服务中解除绑定,服务也会停止。 是否有可能在不杀死服务的情况下取消绑定?

这是我启动服务并绑定它的方式:

Intent serviceIntent = new Intent(this, MyService.class);
//Add user preferences to the service
serviceIntent.putExtra("panel", tbtnBar.isChecked());
serviceIntent.putExtra("sensor", tbtnDown.isChecked());
//Start the service
startService(serviceIntent);

//Bind the service
 isBound= bindService(serviceIntent, mConnection,0);

服务在onDestroy中未绑定:

 @Override
    public void onDestroy()
    {
        if(isBound)
            unbindService(mConnection);

        super.onDestroy();
    }

我一直在搜索,所有帖子只是说在绑定它之前启动服务而不使用BIND_AUTO_CREATE标志。我似乎在做什么。

2 个答案:

答案 0 :(得分:0)

  

是否可以在不杀死服务的情况下取消绑定?

是的,有可能。例如,让服务从其START_STICKY方法返回onStartCommand(),并且一旦完成它应该做的任何事情,请致电stopSelf()

此模式的一个用例是音频重放,因此检查"Service"的文档以及"MediaPlayer"获取一些样本并没有什么坏处。

答案 1 :(得分:0)

看!这很棘手。 例如,我们说可以通过调用 startService(intent) bindService(intent,serviceConnection,BIND_AUTO_CREATE)来启动服务。

通过bindService启动服务时,在 onCreate 之后不调用服务的 onStartCommand ,实际上是调用 onBind

由绑定服务(intent,serviceConnection,BIND_AUTO_CREATE)启动的服务在销毁与其绑定的活动后就被销毁。

但是,当我们从startService(intent)启动服务时,在 oncreate 之后触发 onStartCommand ,我们可以从此方法返回start_sticky。 在这种情况下,除非系统这样做,否则永远不会销毁该服务,而与服务连接的绑定和解除绑定无关。该服务将保留在那里。