86 votes

Avantages de l'utilisation de Bundle au lieu d'intention directe putExtra () dans Android

Dans mon application android, je suis toujours à l'aide de direct, putExtra() fonction Intent classe pour passer n'importe quel nombre de valeur à de nouveaux Activity.
Comme ceci:

Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);

Je sais à propos de Bundle sur Android et j'ai vu des gens sont à l'aide de Bundle pour la transmission de valeurs à la nouvelle - Activity.
Comme ceci:

Intent intent = new Intent(this, MyActivity.class);
Bundle extras = new Bundle();
extras.putString("EXTRA_USERNAME","my_username");
extras.putString("EXTRA_PASSWORD","my_password");
intent.putExtras(extras);
startActivity(intent);

Ici j'ai 2 des doutes.
Pourquoi devrais-je utiliser Bundle si je peux transmettre des valeurs à la nouvelle - Activity - la en la plaçant directement à l' Intent?
Quels sont les avantages de l'utilisation de Bundle au lieu de direct, Intent putExtra()?

68voto

fdreger Points 5910

Il fait peu de différence). Le code de l'utilisation d'un autre bundle est un peu plus lourd (il ne fera aucune différence dans les pratiques de l'application) et un peu plus faciles à gérer, étant la plus générale.

Si un jour vous décidez que - avant d'envoyer des informations à l'intérieur de l'intention que vous souhaitez pour sérialiser les données de base de données, il sera un peu plus propre d'avoir un module qui vous pouvez sérialiser, ajouter à une intention et d'alimentation PendingBundle - le tout avec un seul objet.

[mise à jour]

Une clarification (à cause de quelques autres réponses).

Extras est un supplément de bundle que chaque Intention pourrait porter (mais ne pas le faire), donc il n'y a pas d'alternative entre l'utilisation d'un forfait ou ne l'utilisez pas. Vous êtes à l'aide d'un faisceau à l'autre.

La première fois que vous utilisez putExtra, un mExtras bundle à l'intérieur de l'Intention est initialisé et toutes les suivantes putExtra sont déléguées. Le paquet lui-même est inaccessible (ce qui est voulu par la conception, afin d'éviter certains bugs).

putExtras ne pas mettre votre paquet à l'intérieur de l'Intention. Au lieu de cela, il copie à l'intention courante bundle (ou crée un, comme avec putExtra). C'est pourquoi il est légèrement plus lourd (vous avez deux paquets au lieu d'un et payer le prix de la copie).

Le crux est - si vous utilisez putExtras, vous ne pouvez toujours pas accéder à la véritable faisceau à l'intérieur de l'intention. MAIS - vous d'avoir une copie pour quelque autre chose que vous voulez faire avec elle. Comme les maintenir autour de copier dans une autre intention (si vous envoyez beaucoup de semblables intentions).

6voto

njzk2 Points 17085

Les bundles sont cool parce que vous pouvez isoler leur création / lecture plus facilement, séparant ainsi le code manipulant les bundles du code de l'interface utilisateur.

Dans la plupart des cas, cela ne sert à rien, car vous souhaitez transmettre le moins de données possible (en général, quelques chaînes, un identifiant, etc.).

5voto

Mahaveer Muttha Points 785

vous pouvez vous référer à ceci et aussi à cela .

vous pouvez envoyer plusieurs données ou un groupe de données dans un ensemble et les envoyer via Intent. ou une autre manière est d'ajouter plusieurs déclarations de PutExtra ().

Et il n'y a pas de différence aussi importante selon mes connaissances.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X