Android Service多个实例

时间:2013-04-10 16:31:19

标签: android service instance

我仍然对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);

3 个答案:

答案 0 :(得分:14)

我说你在滥用这门课: - )。

多次调用startService()不会导致启动多个服务。

来自doc

  

请求启动给定的应用程序服务。 Intent可以包含要启动的特定服务实现的完整类名,也可以包含通过操作的抽象定义以及要启动的服务类型的其他字段。如果此服务尚未运行,它将被实例化并启动(如果需要,为其创建一个进程);如果它正在运行,那么它仍然在运行。

您也应该覆盖onStartCommand()。如果尚未启动,则第一个startService调用将启动该服务。在任何情况下,onStartCommand都会拦截任何进一步的startService调用以及你想要发送给它的意图。

答案 1 :(得分:8)

  

任何解决方法或我是否完全滥用服务类?

您完全滥用Service课程。

通过两种基本模式使用Service

  1. 通过startService()向其发送命令。

  2. 绑定到它,通过Service调用由bindService()公开的API。

  3. 更准确地绑定描述了你想要做的事情(“所以我可以调用服务的方法”),但是绑定很难做到正确,特别是在配置更改时。

    因此,我建议您首先坐下来确定完全准确地为什么 您首先使用Service。例如,ControlPanel是我将与UI关联的名称,而不是无UI(“背景”)操作。然后,只有这样才能确定命令或绑定模式是否适合您的用例。

答案 2 :(得分:-7)

您可以使用一个服务类执行此操作。

public static int myStaticMethod(){
        return 1;
    }

只需制作访问静态所需的方法即可。