我正在使用startService在我的应用程序中启动服务。
我不想使用bindService,因为我想自己处理服务的生命周期。
如果我不使用bindService,如何启动服务实例?我希望能够获得我在服务类中创建的处理程序,以便从活动中发布消息。
感谢。
/亨里克
答案 0 :(得分:16)
我不想像我一样使用bindService 想要处理使用寿命 自己。
这并不意味着你必须避免bindService()
。如果需要,请同时使用startService()
和bindService()
。
如何获取实例 如果我不使用,服务就开始了 bindService?
将bindService()
与startService()
一起使用,或使用单身。
答案 1 :(得分:5)
这是另一种方法:
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
private Binder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new Binder();
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public class Binder extends android.os.Binder {
public MyService getService() {
return MyService.this;
}
}
}
onServiceConnected(...)可以将其参数投射到MyService.Binder
并在其上调用getService()
。这避免了对服务的静态引用可能导致的内存泄漏。当然,您仍然需要确保您的活动不会挂在参考文献上。