如何获取Android本地服务实例
我正在使用startService在应用程序中启动服务 我不想使用bindService,因为我想自己处理使用寿命 如果不使用bindService,如何启动服务实例?我希望能够获得我在服务类中创建的处理程序,以发布来自活动的消息 谢谢 /亨里克 我不想像我一样使用bindService 要处理的使用寿命时间 我自己 这并不意味着您必须避免如何获取Android本地服务实例,android,service,Android,Service,我正在使用startService在应用程序中启动服务 我不想使用bindService,因为我想自己处理使用寿命 如果不使用bindService,如何启动服务实例?我希望能够获得我在服务类中创建的处理程序,以发布来自活动的消息 谢谢 /亨里克 我不想像我一样使用bindService 要处理的使用寿命时间 我自己 这并不意味着您必须避免bindService()。如果需要,请同时使用startService()和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)中无操作触发器。我想触发播放/暂停,下一个向前按钮(我的应用程序是音乐播放器应用程序)动作。