Quelle est la différence entre l'appel d'activité explicite et implicite dans Android? Si vous expliquez la réponse avec un exemple simple, ce sera bien.
Par exemple:
appel d'activité implicite
Dans le filtre d'intention, vous créez une action pour votre activité, afin qu'une autre application puisse appeler votre activité via cette action comme suit:
<activity Android:name=".BrowserActivitiy" Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<data Android:scheme="http"/>
</intent-filter>
</activity>
Et l'autre façon d'appeler l'intention implicite est ci-dessous:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
startActivity(intent);
Appel d'activité explicite
Vous effectuez un appel qui indique exactement quelle classe d'activité:
Intent intent = new Intent(this, ActivityABC.class);
i.putExtra("Value", "This value for ActivityABC");
startActivity(intent);
J'espère que cela vous aidera à mieux comprendre l'appel d'activité explicite et implicite dans Android.
Vous pouvez obtenir plus de détails sur Android Intention ici
Une intention explicite est toujours livrée à sa cible, peu importe ce qu'elle contient; le filtre n'est pas consulté. Mais une intention implicite n'est délivrée à un composant que s'il peut passer à travers l'un des filtres du composant
Intention explicite: Lorsque vous savez quel composant peut gérer votre demande. Donc, vous mentionnez explicitement ce nom de composant dans l'intention.
Intent i = new Intent(context,DetailActivity.class); // DetailActivity.class is the component name
startActivity(i);
Intention implicite: Lorsque vous ne savez pas quelle application peut gérer votre demande, alors vous mentionnez l'action dans l'intention et laissez le système d'exploitation décider quelle (s) application (s) est/sont appropriée (s) pour votre tâche.
Exemple: jouer de la musique
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(file);
startActivity(intent);
Lorsqu'il y a un appel implicite avec une intention, le système d'exploitation supprime l'action, puis elle correspond à tous les filtres d'intention de toutes les activités enregistrées de toutes les applications utilisant PackageManager, puis remplit le résultat sous forme de liste. Il s'appelle résolution d'intention
Il est donc possible qu'aucune application ne soit disponible sur votre appareil pour traiter votre demande. Dans ce cas, vous obtiendrez l'exception NullPointer.
Donc, une façon plus sûre d'appeler intention implicite serait la
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
Voir la résolution d'intention ici
http://developer.Android.com/guide/topics/intents/intents-filters.html
Les intentions (activités) explicites se réfèrent à une classe spécifique et, en général, ne sont disponibles que pour vos packages. Les intentions implicites font référence aux filtres d'intention dans lesquels les applications annoncent publiquement qu'elles peuvent gérer certains types de données ou peuvent fournir des services spécifiques, par exemple envoyer un e-mail. Avec des intentions implicites, les utilisateurs choisissent l'activité (généralement un package) à utiliser pour gérer l'intention ou si un gestionnaire par défaut est défini, il est lancé.
Chaque fois que je m'embrouille dans ces deux interviews. Donc, je l'ai résumé comme ceci, que cela aide quelqu'un à garder cette différence à l'esprit.
Résumé:
Dans Intentions implicites , l'utilisateur implicitement indique au système CE QUE doit être fait, sans spécifier qui doit le faire.
Dans Intentions explicites , l'utilisateur explicitement indique au système QUI doit être déclenché quel que soit le travail.
Il existe deux types d'intentions:
Intention explicite:
Lors de la création d'un objet Intent lorsque nous spécifions et transmettons explicitement le nom du composant cible directement dans l'intention , c'est une intention explicite.
Intention implicite:
Dans ce cas, nous déléguons la tâche d'évaluer les composants enregistrés (l'enregistrement se fait généralement à l'aide de filtres d'intention que nous couvrirons plus tard) à Android basé sur les données d'intention et l'action prévue (comme envoyer un e-mail, capturer une photo, épingler l'emplacement sur une carte, etc.) que nous transmettons. Donc Android lancera automatiquement le composant à partir de la même application ou d'une autre application capable de gérer l'intention message/job. L'idée dans ce cas est que, disons que nous devons épingler un emplacement sur une carte, pour cela nous n'avons pas à coder notre propre activité pour gérer cela. il suffit de transmettre les données de localisation à une application comme Google maps qui peut faire le travail au nom de notre application.