recherche

Maison  >  Questions et réponses  >  le corps du texte

Problèmes liés à Android - Comment Android rend-il le service de la bibliothèque lib importée unique dans le système ?

Tout d'abord, j'ai une bibliothèque lib, qui définit un 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>

Maintenant, ajoutez deux applications qui ont introduit cette bibliothèque, puis les appelez dans leurs codes respectifs :

startService(new Intent(context, SharedService.class))

Ce que je pense maintenant, c'est qu'il ne devrait y en avoir qu'un seul SharedService的实例,在进程com.lib.aidl.SharedService dans le système.

Mais la situation réelle est qu'il existe deux SharedService的实例,它们都在进程名为com.lib.aidl.SharedService processus, mais les identifiants de processus sont différents. pourquoi donc?

Je souhaite maintenant qu'une seule SharedService的实例,当第二次调用startService时回调onStartCommandméthode apparaisse dans le système. Est-ce possible ?

巴扎黑巴扎黑2781 Il y a quelques jours591

répondre à tous(1)je répondrai

  • PHP中文网

    PHP中文网2017-05-16 13:23:35

    android:process="com.lib.aidl.SharedService"

    替换成

    android:process=":com.lib.aidl.SharedService"

    试试

    注意,加了个 ':'

    Le nom du processus sur lequel le service doit être exécuté. Normalement, tous les composants d'une application s'exécutent dans le processus par défaut créé pour l'application. Il porte le même nom que le package de candidature. L'<application> L'attribut process de l'élément peut définir une valeur par défaut différente pour tous les composants. Mais le composant peut remplacer la valeur par défaut avec son propre attribut de processus, vous permettant ainsi de répartir votre application sur plusieurs processus.
    Si le nom attribué à cet attribut commence par deux points (':'), un nouveau processus, privé de l'application, est créé lorsque cela est nécessaire et le service s'exécute dans ce processus. Si le nom du processus commence par un caractère minuscule, le service s'exécutera dans un processus global de ce nom, à condition qu'il en ait l'autorisation. Cela permet aux composants de différentes applications de partager un processus, réduisant ainsi l'utilisation des ressources.

    répondre
    0
  • Annulerrépondre