Heim > Fragen und Antworten > Hauptteil
Zuallererst habe ich eine Bibliothek, die einen Dienst definiert:
<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>
Fügen Sie nun zwei Apps hinzu, die diese Bibliothek eingeführt haben, und nennen Sie sie dann in ihren jeweiligen Codes:
startService(new Intent(context, SharedService.class))
Was ich jetzt denke ist, dass es nur einen SharedService
的实例,在进程com.lib.aidl.SharedService
im System geben sollte.
Aber die tatsächliche Situation ist, dass es zwei SharedService
的实例,它们都在进程名为com.lib.aidl.SharedService
Prozesse gibt, aber die Prozess-IDs sind unterschiedlich. Warum das?
Ich möchte jetzt, dass nur eine SharedService
的实例,当第二次调用startService
时回调onStartCommand
Methode im System erscheint. Ist das möglich?
PHP中文网2017-05-16 13:23:35
将
android:process="com.lib.aidl.SharedService"
替换成
android:process=":com.lib.aidl.SharedService"
试试
注意,加了个 ':'
The name of the process where the service is to run. Normally, all components of an application run in the default process created for the application. It has the same name as the application package. The <application> element's process attribute can set a different default for all components. But component can override the default with its own process attribute, allowing you to spread your application across multiple processes.
If the name assigned to this attribute begins with a colon (':'), a new process, private to the application, is created when it's needed and the service runs in that process. If the process name begins with a lowercase character, the service will run in a global process of that name, provided that it has permission to do so. This allows components in different applications to share a process, reducing resource usage.