林还是有点新的Android的服务类。 我知道你需要从startService(意图)申请启动该服务,但我的问题是我的服务里面的方法。 我需要有一个意图启动该服务,然后在我的活动创建一个类的对象,所以我可以调用该服务的方法。 问题是,当我这样做我创建该服务的一个实例,当我有意向和服务的另一实例启动它,当我在我的活动创建该类的对象。 这意味着传递到服务,从startService(意向)的任何数据是不存在的,当我创建的服务对象。 解决这个任何方式还是我只是完全滥用服务类? 我可以提供一些代码,但它基本上是这样的:
//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()多次不会导致启动多个服务。
从文档 :
请求给定的应用服务启动。 这样做的目的可以包含特定服务实现的完整的类名来启动,或通过动作和各种服务和其他领域的抽象定义开始。 如果此服务尚未运行,它将会被实例化,并开始(如果需要为它创造的过程); 如果正在运行,那么它仍然保持运行。
你应该重写onStartCommand()为好。 如果它尚未启动的第一个电话startService启动服务。 在任何情况下onStartCommand将拦截要发送给它的任何进一步startService电话和意图。
解决这个任何方式还是我只是完全滥用服务类?
你是完全滥用Service
类。
甲Service
经由两个基本模式使用:
发送命令到它,通过startService()
结合到它,调用由该展示的API Service
,经由bindService()
更准确地描述了绑定你正在尝试做的(“这样我就可以调用该服务的方法”),但结合是棘手的获得的权利,特别是当它涉及到配置更改。
因此,我首先建议你坐下来, 完全准确地确定为什么您使用的Service
摆在首位。 ControlPanel
,例如,是我将与UI,UI不能少(“背景”)业务相关联的名称。 那时,也只有这样你才能决定是否命令或结合模式是适合您的使用情况。
你可以用一个服务类做到这一点。
public static int myStaticMethod(){
return 1;
}
只是让你需要访问的静态方法。