我仍然对Android服务类有点新鲜。我知道你需要使用startService(intent)从应用程序启动服务,但是我的问题是我的服务里面有方法。我需要以intent开始服务,然后在Activity中创建该类的对象,以便我可以调用该服务的方法。问题是当我这样做时,当我在我的活动中创建类的对象时,当我使用intent和另一个服务实例启动它时,我创建了一个服务实例。这意味着当我创建服务的对象时,从startService(intent)传递给服务的任何数据都不存在。有什么方法可以解决这个问题,还是我完全滥用服务类?我可以提供一些代码,但基本上是这样的:
//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);
答案 0 :(得分:14)
我说你在滥用这门课: - )。
多次调用startService()不会导致启动多个服务。
来自doc:
请求启动给定的应用程序服务。 Intent可以包含要启动的特定服务实现的完整类名,也可以包含通过操作的抽象定义以及要启动的服务类型的其他字段。如果此服务尚未运行,它将被实例化并启动(如果需要,为其创建一个进程);如果它正在运行,那么它仍然在运行。
您也应该覆盖onStartCommand()。如果尚未启动,则第一个startService调用将启动该服务。在任何情况下,onStartCommand都会拦截任何进一步的startService调用以及你想要发送给它的意图。
答案 1 :(得分:8)
任何解决方法或我是否完全滥用服务类?
您完全滥用Service
课程。
通过两种基本模式使用Service
:
通过startService()
向其发送命令。
绑定到它,通过Service
调用由bindService()
公开的API。
更准确地绑定描述了你想要做的事情(“所以我可以调用服务的方法”),但是绑定很难做到正确,特别是在配置更改时。
因此,我建议您首先坐下来确定完全准确地为什么 您首先使用Service
。例如,ControlPanel
是我将与UI关联的名称,而不是无UI(“背景”)操作。然后,只有这样才能确定命令或绑定模式是否适合您的用例。
答案 2 :(得分:-7)
您可以使用一个服务类执行此操作。
public static int myStaticMethod(){
return 1;
}
只需制作访问静态所需的方法即可。