我创建了一个可以通过startService()
方法启动的服务,但它也受应用程序的约束。我希望它只能通过startService()
方法启动,换句话说,只有在服务已经启动时,应用程序才能绑定到它。
但是,默认行为完全不同:事实上,当应用程序想要绑定它时,Android会自动启动服务。我想知道是否可以修改此行为以实现上述要求。
如果无法做到这一点,唯一的选择就是在服务因bindService()
而启动时停止服务。以下是我的服务类的更改,以便使用这种方式......
// It says if the service was started manually.
private boolean mCorrectlyStarted = false;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(LOG_TAG, "onStartCommand()");
mCorrectlyStarted = true; // the service is started manually: ok!
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
Log.i(LOG_TAG, String.format("onBind(intent: %s)", intent));
if (mCorrectlyStarted) {
return binder;
}
else {
stopSelf(); // although I make this call, the service is not stopped
return null;
}
}
为什么我的更改没有达到预期的效果? 当应用程序调用{{1}}方法时,服务启动可能会很好,但在验证它没有手动启动后,它应该自行停止。
答案 0 :(得分:0)
事件,如活动,称为bindService()
,意味着某人仍然受到服务的约束。调用stopSelf()
不会破坏服务,因为从技术上讲,服务仍受活动约束。
一旦活动最终调用unbindService
,它将被销毁。绑定和启动服务是正交的。
我不确定您尝试使用此设计实现的目标,可能会提供更多信息,说明为什么您希望在某些内容可以绑定之前启动该服务?