suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Android-bezogene Probleme – Wie macht Android den Dienst in der importierten lib-Bibliothek im System eindeutig?

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时回调onStartCommandMethode im System erscheint. Ist das möglich?

巴扎黑巴扎黑2780 Tage vor590

Antworte allen(1)Ich werde antworten

  • PHP中文网

    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.

    Antwort
    0
  • StornierenAntwort