我有一个包含两个模块的应用程序,一个运行后台服务的SDK
模块和一个包含应用程序UI的UI
模块。
此应用程序有两种构建风格,可略微改变用户界面 - SDK
模块未更改。这两种风格具有不同的应用程序ID,因此它们可以同时安装在同一设备上。
我遇到的问题是SDK
模块启动的服务只能有一个实例 - 显然即使从不同的构建变体运行。因此,当我尝试同时运行两个变体时,第二个不启动服务 - 仅调用onStartCommand
。
我试图创建两个类,它们都继承主服务并将每个类放在两个flavor文件夹中,使实际的服务类名称不同。这似乎没有效果。
我也尝试了各种启动服务的方法 - startService
或bindService
- 都没有效果。
如何允许两个构建版本同时运行同一服务的单独实例 - 这是否可能?
答案 0 :(得分:0)
Android服务只能有一个实例。系统不允许创建同一服务的多个实例。
话虽如此,您可以做两件事作为解决方法:
1)在Manifest.xml中为两个服务创建两个略有不同的条目。您还需要提供onCreate()和onStartCommand()函数,但大多数服务代码可以是通用的和共享的。 onCreate()和onStartCommand将具有最低限度的实现,并将调用公共共享代码。
2)另一种选择是使用IntentService。只要有待处理的任务,IntentService就会运行,但它允许创建多个实例。如果它适合您的应用程序设计,则可以使用此选项。