当我使用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;
这对我来说似乎不对,所以任何关于它应该如何运作的其他想法都会受到赞赏。
答案 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;
}