2017-08-23 1 views
3

Fondamentalement, il est clair pour distinguer l'intention implicite et expliciteapplications O - confus de definiton d'intention implicite et explicite Intention

Explicit intentions ont spécifié un composant (via setComponent (ComponentName) ou setClass (Contexte , Class)), qui fournit la classe exacte à exécuter. Souvent ceux-ci ne comprennent aucune autre information, étant simplement un moyen pour une application de lancer diverses activités internes dont il dispose lorsque l'utilisateur interagit avec l'application .

Les intentions implicites n'ont pas spécifié de composant; au lieu de cela, ils doivent inclure suffisamment d'informations pour que le système détermine lequel des composants disponibles est le mieux adapté à cette intention.

Mais je suis confus par Google introduit sur https://developer.android.com/about/versions/oreo/background.html#broadcasts

Par exemple, ACTION_PACKAGE_REPLACED est une émission implicite, puisque il est envoyé à tous les auditeurs enregistrés, de leur faire savoir que certains package sur l'appareil a été remplacé. Cependant, ACTION_MY_PACKAGE_REPLACED n'est pas une diffusion implicite, puisqu'elle est envoyée uniquement à l'application dont le package a été remplacé, quel que soit le nombre d'autres applications ayant des écouteurs enregistrés pour cette diffusion.

Pourquoi ACTION_MY_PACKAGE_REPLACED n'est pas une émission implicite?

+1

"il est envoyé uniquement à l'application dont le paquet a été remplacé" - Cela signifie que le 'Intent' est créé pour cibler le composant enregistré pour cette diffusion, _et_ il porte l'action' ACTION_MY_PACKAGE_REPLACED'. Explicit 'Intent's peut également avoir des actions. –

+0

Oui, je sais explicite * Intent * peut également avoir des actions, mon doute est pourquoi ACTION_MY_PACKAGE_REPLACED est considéré comme explicite. –

+0

Voulez-vous dire que cette action est spécifiée package cible lors de l'envoi par le système? –

Répondre

0

Pourquoi ACTION_MY_PACKAGE_REPLACED n'est pas une diffusion implicite?

Parce que c'est ainsi que Google a écrit le code qui envoie les diffusions ACTION_MY_PACKAGE_REPLACED. Ils créent un Intent explicite, identifiant le récepteur spécifique pour recevoir la diffusion. Ils attachent également la chaîne d'action, dans le cas où le destinataire reçoit plusieurs émissions et doit les distinguer les unes des autres. Un Intent explicite est invité à avoir une chaîne d'action. La distinction entre Intents implicite et explicite est si le Intent identifie le composant ou non.

+0

l'ai eu, merci beaucoup. –

1

ACTION_MY_PACKAGE_REPLACED est une intention qui est diffusée UNIQUEMENT à votre application, car elle est seulement déclenchée lorsque VOTRE application est remplacée. Cela en fait une intention explicite et en tant que tel n'est pas soumis à la limitation à Android O.

Cependant ACTION_PACKAGE_REPLACED est envoyé à chaque application chaque fois qu'un paquet est remplacé, donc il n'est pas spécifique à votre application. Cela fait une intention implicite et est donc interdit sous les nouvelles règles d'arrière-plan d'Android.