如何获取Android本地服务实例

如何获取Android本地服务实例,android,service,Android,Service,我正在使用startService在应用程序中启动服务 我不想使用bindService,因为我想自己处理使用寿命 如果不使用bindService,如何启动服务实例?我希望能够获得我在服务类中创建的处理程序,以发布来自活动的消息 谢谢 /亨里克 我不想像我一样使用bindService 要处理的使用寿命时间 我自己 这并不意味着您必须避免bindService()。如果需要,请同时使用startService()和bindService() 我怎样才能得到一个实例 如果我不使用,服务已启动 绑

我正在使用startService在应用程序中启动服务

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

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

谢谢

/亨里克

我不想像我一样使用bindService 要处理的使用寿命时间 我自己

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

我怎样才能得到一个实例 如果我不使用,服务已启动 绑定服务


可以将
bindService()
startService()
一起使用,也可以使用单例。

以下是另一种方法:

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;
        }
    }
}

可以将其参数强制转换为
MyService.Binder
并对其调用
getService()
。这避免了对服务的静态引用可能导致的内存泄漏。当然,您仍然必须确保您的活动没有挂在引用上。

通过“使用单例”,您的意思是我应该在服务类中声明我的方法是静态的?对于bindService和startService都很有吸引力。谢谢大家!@Henrik:FWIW,通过singleton,我的意思是你将有一个对你的服务的静态引用,放在服务的
onCreate()
,在服务的
onDestroy()中删除。这会有内存泄漏的风险,因此建议尽可能使用绑定。@Commonware如果我在“活动”中使用bindService(),我可以完美地获得服务实例,但问题是当我通过单击“设备返回”按钮从应用程序转到设备主屏幕时,从通知扩展(状态栏)bigView(RemoteView)中无操作触发器。我想触发播放/暂停,下一个向前按钮(我的应用程序是音乐播放器应用程序)动作。