web-dev-qa-db-fra.com

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

Dans mon Android Android, j'utilise toujours la fonction directe putExtra() de la classe Intent pour transmettre un nombre quelconque de valeurs à la nouvelle Activity.
Comme ça:

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

Je connais Bundle dans Android et j'ai vu des gens utiliser Bundle pour passer des valeurs à de nouveaux Activity.
Comme ça:

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 doutes.
Pourquoi devrais-je utiliser Bundle si je peux passer des valeurs à new Activity en le plaçant directement dans Intent?
Quels sont les avantages d'utiliser Bundle au lieu de direct IntentputExtra()?

72
Vishal Vijay

Cela fait peu (voire aucune différence). Le code utilisant un bundle supplémentaire est légèrement plus lourd (cela ne fera aucune différence dans aucune application pratique) et légèrement plus facile à gérer, étant plus général.

Si un jour vous décidez que - avant d'envoyer des informations dans une intention - vous voulez sérialiser les données dans la base de données - il sera un peu plus propre d'avoir un bundle que vous pouvez sérialiser, ajouter à une intention puis alimenter un PendingBundle - tout avec un seul objet.

[mise à jour]

Une clarification (à cause d'autres réponses).

Extras is un bundle supplémentaire que chaque Intention peut transporter (mais pas obligé), il n'y a donc pas d'alternative entre utiliser un bundle ou ne pas l'utiliser. Vous utilisez un bundle dans les deux cas.

La première fois que vous utilisez putExtra, un bundle mExtras dans Intent est initialisé et tous les putExtra suivants lui sont délégués. Le bundle lui-même vous est inaccessible (c'est par conception, pour éviter certains types de bugs).

putExtras ne le fait pas mettez votre bundle dans Intent. Au lieu de cela, il le copie dans le bundle d'intention actuel (ou en 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 payez le prix de la copie).

Le nœud est - si vous utilisez putExtras, vous ne pouvez toujours pas accéder au véritable bundle à l'intérieur de l'intention. MAIS - vous avez une copie pour tout ce que vous pourriez vouloir en faire. Comme garder autour de copier dans une autre intention (si vous envoyez beaucoup d'intentions similaires).

61
fdreger

Avantage supplémentaire: Une fois les données regroupées, vous pouvez envoyer les mêmes données via plusieurs intentions. (Seulement dans le cas, plusieurs intentions doivent être envoyées).

16
vanguard69

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

Dans la plupart des cas, cela est inutile car vous voudrez transmettre le plus petit nombre possible de données (généralement juste quelques chaînes, un identifiant ...)

6
njzk2

vous pouvez faire référence this et aussi this .

vous pouvez envoyer plusieurs ou plusieurs données en un seul paquet et les envoyer via Intent. ou une autre façon consiste à ajouter plusieurs instructions de PutExtra ().

Et il n'y a pas de différence aussi importante à ma connaissance.

5
Mahaveer Muttha