我有一个需要从活动中获取一些输入的服务。为了让他们进行交流,我将活动绑定到我的服务,沟通很有效。但是,一旦活动关闭并从服务中解除绑定,服务也会停止。 是否有可能在不杀死服务的情况下取消绑定?
这是我启动服务并绑定它的方式:
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标志。我似乎在做什么。
答案 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。 在这种情况下,除非系统这样做,否则永远不会销毁该服务,而与服务连接的绑定和解除绑定无关。该服务将保留在那里。