使用startService启动服务时如何获取IBinder / ServiceConnection / onServiceConnected?

时间:2011-10-12 18:37:57

标签: android service

当我使用startService(...)启动服务时,我一直在寻找获得ServiceConnection的方法。

我还没找到方法,所以我一直在搜索,发现这个: Does each Activity need to Bind to a Service & What happens when it was created with startService()

在那里,Commonsware说如果我在startService调用之后调用bindService并不重要。

所以我认为我首先运行startService(...)然后直接执行bindService(...)(以便调用onServiceConnected)。但随后Service.onCreate执行了两次。可能是因为startService没有完成"尚未...

问题是:我如何获得对我的服务(IBinder)的引用,即。如果我使用startService启动我的服务,如何启动onServiceConnected?

---编辑---

我仍然想知道你可能有的任何答案和想法。我做了一个" hack"解决这个问题:

我只是制作了一个静态引用(在SRef.java我公开static IBinder myBinder = null),在我的Service.onCreate我做了简单的

SRef.myBinder = myBinder;

这对我来说似乎不对,所以任何关于它应该如何运作的其他想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我使用完全相同的技术(samba客户端服务),onCreate永远不会被我调用两次,我得到了绑定器(通过连接回调),正如我所料。新的活动开始不会触发onCreate,因为之前的startService已经执行了服务的启动。

这是我的代码(可能很简单,但也许有帮助):

活动(onCreate):

startService(new Intent(this, SambaService.class));
bindService(new Intent(this, SambaService.class), sambaServiceConnection,
        Context.BIND_AUTO_CREATE);

服务:

private ServiceBinder mServiceBinder = new ServiceBinder();

public class ServiceBinder extends Binder {
    public SambaService getService() {
        return SambaService.this;
    }
}

public IBinder onBind(Intent intent) {
    return mServiceBinder;
}