首先,我有一个lib库,库里面定义了以个Service:
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true">
<service
android:name=".SharedService"
android:process="com.lib.aidl.SharedService"
android:enabled="true"
android:exported="true">
</service>
</application>
现在,加入有两个app都引入了这个库,然后在各自的代码里都调用了:
startService(new Intent(context, SharedService.class))
我现在想的是系统中应该只有一个SharedService
的实例,在进程com.lib.aidl.SharedService
中。
但是实际情况是有两个SharedService
的实例,它们都在进程名为com.lib.aidl.SharedService
的进程中,但是进程id是不一样的。这是为什么?
我现在想让系统中仅出现一个SharedService
的实例,当第二次调用startService
时回调onStartCommand
方法,这个可以做到么?
PHP中文网2017-05-16 13:23:35
将
雷雷替换成
雷雷尝试
注意,加了个':'
运行服务的进程的名称。通常,应用程序的所有组件都在为应用程序创建的默认进程中运行。它与应用程序包具有相同的名称。 <应用>元素的 process 属性可以为所有组件设置不同的默认值。但是组件可以使用自己的进程属性覆盖默认值,从而允许您将应用程序分布在多个进程中。
如果分配给该属性的名称以冒号(“:”)开头,则一个新进程是该应用程序私有的在需要时创建并且服务在该进程中运行。如果进程名称以小写字符开头,则服务将在该名称的全局进程中运行,前提是它有权这样做。这允许不同应用程序中的组件共享进程,减少资源使用。