如果存在,则绑定到服务

5

我正在开发一个项目,需要一个活动来连接到本地服务,如果该服务正在运行,则启动它,如果没有运行,则启动它。 对于这种方法,什么是合适的标志?


4
笑,这个问题的修改完全颠倒了它的意思。干得好,伙计们。 - Jens
起初是 ...如果不存在就不创建它,现在是 ...如果未运行则启动它。回答地址原始问题,对于编辑后的问题,适当的答案应该是使用 BIND_AUTO_CREATE 标志。 - snachmsm
@snachmsm / Jens,我必须承认这个编辑是错误的。我记得当时为什么会问那个问题,我想连接到一个服务但不启动它。但是我已经好几年没有做过Android开发了,所以我不确定被接受的答案是否适用于当前的问题或原始问题(即我想要的)。 - Mr.Me
1个回答

7
这可以通过在调用#bindService(Intent, ServiceConnection, int)时将最后一个参数传递为0来简单实现。

例如:

bindService(new Intent(this, MrMeService.class), new ServiceConnection(){
        public void onServiceDisconnected(ComponentName name) {
            System.out.println("Service disconnected");
        }
        public void onServiceConnected(ComponentName name, IBinder service) {
            System.out.println("Service connected");
        }
    }, 0);
< p > #bindService(..)调用将返回true,但服务实际上不会启动,并且您的服务连接将不会触发直到有人实际启动服务,例如使用#startService(Intent)。至少在ICS和Gingerbread上是这样工作的。


这是一个很好的答案,因为许多其他人只建议存储bindService()方法返回的布尔值,但那不是正确的。这才是正确的。注意:unbindService()虽然解除了与服务的绑定,但不会调用onServiceDisconnected()。推荐: onResume() -> bind(), onPause() -> unbind(), onEventToStart() -> start(), onEventToStop() -> stop()。在我测试过的所有设备上都可以工作。 - Armando
1
@HvSimon 好久不见,但我很可能是指您自己的事件触发了服务的启动和停止。无论需要什么后台进程。 - Armando

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接