web-dev-qa-db-fra.com

Android Contexte d'intention déroutant

Quelqu'un peut-il m'expliquer cela s'il vous plaît:

Intent intent = new Intent(Context, AlarmReceiver.class);

Je n'ai jamais compris et je pense sérieusement que je ne le ferai jamais si quelqu'un n'essaie pas de m'expliquer en profondeur. Toute cette histoire de contexte me dérange tellement. Parfois, cela fonctionne comme ceci:

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);

Parfois, cela ne fonctionnera pas comme ça, mais il n'accepte que:

    Intent intent = new Intent(context, AlarmReceiver.class);

Parfois c'est:

Intent intent = new Intent(this, AlarmReceiver.class);

etc. etc. et beaucoup d'autres.

Je comprends les bases du contexte mais combien y en a-t-il? Et pourquoi Eclipse me lance-t-il une erreur une fois de plus, c'est bien? Pourquoi devons-nous parfois déclarer le contexte? :

Context context;

Je n'arrive pas à trouver le bon contexte pour toutes les situations, comment savoir quel est le bon dans chaque situation?

52
user1880779

Tout d'abord, permettez-moi d'expliquer ce qui le contexte est un peu mieux, puis passons à la façon dont il peut être utilisé et reçu. Essentiellement, le contexte est une référence pour lier vos ressources à votre programme. Chaque objet reçoit son propre contexte, qui contient les ressources nécessaires pour configurer cet objet. Il est nécessaire pour la création de nombreux objets et pour obtenir des informations d'identification de programme, entre autres. Cela rend inestimable la mise en place de nouvelles vues et activités, mais il peut également être utilisé à d'autres fins. Voir aussi cette réponse pour plus d'informations.

Le contexte d'un élément peut provenir de divers endroits. Parfois, il est stocké et doit être récupéré, parfois il est hérité. Fondamentalement, il s'agit d'une programmation orientée objet.

Pour vous donner quelques exemples:

Activité hérite du contexte. Ainsi, si vous êtes dans une activité, il vous suffit de vous passer pour utiliser le contexte. Il contient également un pointeur sur getBaseContext(). Vous pouvez parfois avoir besoin de faire référence à cela, si vous avez besoin de tout le contexte de l'application, mais très probablement pas pendant un certain temps.

View n'hérite pas du contexte. Cependant, il a une méthode getContext () . Si vous avez besoin d'obtenir un contexte à partir d'une vue, c'est la façon de l'obtenir. Ce contexte ne sera pas complet, mais n'aura que le contexte pour le contenu de la vue.

Fragments n'héritent pas non plus du contexte. Ils contiennent une méthode getActivity () , qui si le Fragment est actif, renverra l'activité, qui est le contexte du Fragment.

BroadcastReceivers n'héritent pas non plus du contexte. En fait, ils ne contiennent pas de contexte du tout, mais reçoivent simplement le contexte actuel lorsqu'un événement est reçu (comme onReceive (contexte de contexte, intention d'intention) )

63
PearsonArtPhoto

Capacités de contexte

Les actions courantes que vous pouvez effectuer en toute sécurité avec un objet Context donné dépendent de son origine. Vous trouverez ci-dessous un tableau des endroits communs où une application recevra un contexte et, dans chaque cas, à quoi elle est utile:

enter image description here

  1. Une application PEUT démarrer une activité à partir d'ici, mais elle nécessite qu'une nouvelle tâche soit créée. Cela peut correspondre à des cas d'utilisation spécifiques, mais peut créer des comportements de pile arrière non standard dans votre application et n'est généralement pas recommandé ou considéré comme une bonne pratique.
  2. C'est légal, mais l'inflation se fera avec le thème par défaut du système sur lequel vous exécutez, et non celui défini dans votre application.
  3. Autorisé si le récepteur est nul, ce qui est utilisé pour obtenir la valeur actuelle d'une diffusion persistante, sur Android 4.2 et supérieur).

Article d'origine ici .

9
Cheese Bread

Ce que je comprends par contexte, c'est l'environnement. En termes simples, le contexte est l'environnement de n'importe quoi. Donc, lorsque vous utilisez n'importe quelle forme de contexte, vous devez décider quel devrait être l'environnement des choses pour lesquelles vous utilisez le contexte.

Par exemple, si vous souhaitez que certaines données ou certains champs restent dans l'application, vous devez les définir dans la classe d'application.

Maintenant, lorsque vous obtenez le contexte d'application dans l'un de vos composants de votre application, ce champ que vous avez déclaré dans la classe d'application sera dans votre contexte, d'où vous pouvez y accéder.

Il en va de même pour tous les types de contexte.

Si jamais vous essayez d'utiliser alertDialog dans le composant de service en utilisant le contexte "this". Essayez celui-ci et je parie que vous obtiendrez sûrement une exception car "this" représente l'environnement de service lorsqu'il est utilisé dedans.Et comme c'est un composant d'arrière-plan, nous pouvons ' t ajouter une fenêtre dans cela. Il vous indiquera alors l'exception de mauvais jeton. Ce qui signifie que le jeton généré pour la vue environnante n'est pas approprié pour alertDialog à afficher.

J'espère que cela vous donne une brève idée de ce que vous voulez.

5
kaushal trivedi