2010-06-11 77 views
13

我在使用startService的应用程序中启动服务。如何获取Android本地服务实例

我不想使用bindService,因为我想自己处理使用寿命。

如何在不使用bindService的情况下获得启动服务的实例?我希望能够获得我在服务类中创建的处理程序,以便从活动中发布消息。

谢谢。

/亨利克

回答

13

我不想使用bindService我 要处理的工作寿命时间 自己。

这并不意味着您必须避免bindService()。如果需要,请同时使用startService()bindService()

我怎样才能得到,如果我不使用 bindService一个实例的 服务开始了吗?

使用bindService()startService(),或使用单身。

+0

通过“使用单例”,你的意思是我应该在服务类中声明我的方法是静态的吗? – Henrik 2010-06-11 18:47:47

+0

作为bindService和startService的魅力。谢谢! – Henrik 2010-06-11 19:04:51

+2

@Henrik:FWIW,单身人士,我的意思是你有一个静态引用到你的服务,放在服务的'onCreate()',在服务的'onDestroy()'中去掉。这会造成内存泄漏的风险,因此建议尽可能使用绑定。 – CommonsWare 2010-06-11 19:16:21

4

这里的另一种方法:

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(...)可以施展它的参数​​并调用它getService()。这避免了对服务进行静态引用的潜在内存泄漏。当然,你仍然必须确保你的活动没有挂在参考文献上。