使用构建flavor来启动Android Service的多个实例

时间:2015-10-13 10:31:30

标签: android gradle android-service android-productflavors

问题

我有一个包含两个模块的应用程序,一个运行后台服务的SDK模块和一个包含应用程序UI的UI模块。

此应用程序有两种构建风格,可略微改变用户界面 - SDK模块未更改。这两种风格具有不同的应用程序ID,因此它们可以同时安装在同一设备上。

我遇到的问题是SDK模块启动的服务只能有一个实例 - 显然即使从不同的构建变体运行。因此,当我尝试同时运行两个变体时,第二个不启动服务 - 仅调用onStartCommand

以前的尝试

我试图创建两个类,它们都继承主服务并将每个类放在两个flavor文件夹中,使实际的服务类名称不同。这似乎没有效果。 我也尝试了各种启动服务的方法 - startServicebindService - 都没有效果。

问题

如何允许两个构建版本同时运行同一服务的单独实例 - 这是否可能?

1 个答案:

答案 0 :(得分:0)

Android服务只能有一个实例。系统不允许创建同一服务的多个实例。

话虽如此,您可以做两件事作为解决方法:

1)在Manifest.xml中为两个服务创建两个略有不同的条目。您还需要提供onCreate()和onStartCommand()函数,但大多数服务代码可以是通用的和共享的。 onCreate()和onStartCommand将具有最低限度的实现,并将调用公共共享代码。

2)另一种选择是使用IntentService。只要有待处理的任务,IntentService就会运行,但它允许创建多个实例。如果它适合您的应用程序设计,则可以使用此选项。