Android服务多个实例
我对Android服务类仍然有点新鲜。我知道你需要用startService(intent)从你的应用程序启动服务,但是我的问题是我的服务里面有方法。我需要以意图启动服务,然后在我的Activity中创建该类的对象,以便可以调用该服务的方法。问题是,当我这样做时,我创建了一个服务实例,当我在一个intent和另一个服务实例中启动服务时,在我的活动中创建了一个类的对象。这意味着当我创建服务的对象时,从startService(intent)传递给服务的任何数据都不存在。任何解决这个问题的方法还是我完全滥用服务类?我可以给一些代码,但其基本上是这样的:Android服务多个实例
//Create Object of ControlPanel service class.
ControlPanel cPanel = new ControlPanel();
//Create intent for starting ControlPanel service class
Intent controlPanel = new Intent(this, cPanel.getClass());
//Start Service
startService(controlPanel);
我会说你滥用类:-)。
多次调用startService()不会导致启动多个服务。
从doc:
请求一个给定的应用服务启动。 Intent可以包含要启动的特定服务实现的完整类名,也可以包含通过动作和其他类型服务的其他字段的抽象定义来启动。如果此服务尚未运行,它将被实例化并启动(如果需要,将为其创建一个进程);如果它正在运行,那么它仍然在运行。
你也应该覆盖onStartCommand()。如果尚未启动,则第一个startService调用会启动该服务。在任何情况下,onStartCommand将拦截任何进一步的startService调用和您想要发送给它的意图。
任何解决方法或我是完全滥用服务类?
您完全滥用Service
类。
甲Service
经由两个基本模式使用:
发送给它的命令,经由
startService()
。绑定到它,通过
bindService()
调用由Service
公开的API。
更准确地绑定描绘你正在尝试做的(“这样我就可以调用该服务的方法”),但结合是棘手的获得的权利,特别是当它涉及到配置更改。
因此,我首先建议你坐下来,并确定完全准确地为什么你首先使用Service
。例如,ControlPanel
是我将与UI关联的名称,而不是无UI(“背景”)操作。然后才能确定命令或绑定模式是否适合您的用例。
你可以用一个服务类来做到这一点。
public static int myStaticMethod(){
return 1;
}
只需制作访问静态所需的方法即可。
我不确定这是否回答了问题。 – 2015-09-27 00:54:57
肯定没有。 – JHH 2016-10-13 09:15:28
我会看看bindService()。我之前简要地阅读了它,但从来没有用过它。我不明白我能找到什么。你可以推荐任何好的教程页面? – 2013-04-10 16:56:06
@TravisElliott:“你可以推荐任何好的教程页面?” - 我确信有一些,但我不知道我的头顶有什么。我最简单的示例是https://github.com/commonsguy/cw-omnibus/tree/master/AdvServices/Binding,但它来自我的书的高级篇章,因此假设了其他内容(如片段)的使用经验。 – CommonsWare 2013-04-10 17:01:03
这样做的关键是我需要服务在我调用它的方法时执行工作,然后通过信使发送信息到主要活动。该服务有一个可运行的线程,在后台线程上执行工作(通过tcp套接字发送数据)。任何想法在更好的方式来做到这一点。我真的不想使用Intent服务,因为另一个线程也需要保持运行以接收数据。 – 2013-04-10 17:21:07