Qu'est-ce qu'un bundle
dans une application Android ? Quand l'utiliser ?
Pourquoi ne pas simplement utiliser directement System.object et caster ?
Qu'est-ce qu'un bundle
dans une application Android ? Quand l'utiliser ?
Les bundles sont généralement utilisés pour transmettre des données entre différentes activités Android. Cela dépend de vous quel type de valeurs vous voulez transmettre, mais les bundles peuvent contenir tous types de valeurs et les transmettre à la nouvelle activité.
Vous pouvez l'utiliser comme ceci :
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
Vous pouvez récupérer les valeurs transmises en faisant :
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
Vous pouvez trouver plus d'informations sur :
Transférer des données entre les activités en utilisant les objets Bundle
et Intent
.
Tout d'abord, créez un objet Bundle
Bundle b = new Bundle();
Ensuite, associez les données de chaîne stockées dans anystring
à la clé du bundle "myname"
b.putString("myname", anystring);
Créez maintenant un objet Intent
Intent in = new Intent(getApplicationContext(), secondActivity.class);
Transférez l'objet bundle b
à l'intent
in.putExtras(b);
et démarrez la deuxième activité
startActivity(in);
Dans la deuxième activité, nous devons accéder aux données transmises depuis la première activité
Intent in = getIntent();
Vous devez maintenant obtenir les données du bundle
Bundle b = in.getExtras();
Enfin, obtenez la valeur des données de chaîne associées à la clé nommée "myname"
String s = b.getString("myname");
Je dois ajouter que les bundles sont utilisés par les activités pour transmettre des données à elles-mêmes dans le futur.
Lorsque l'écran tourne, ou lorsqu'une autre activité est lancée, la méthode protected void onSaveInstanceState(Bundle outState)
est invoquée, et l'activité est détruite. Plus tard, une autre instance de l'activité est créée, et public void onCreate(Bundle savedInstanceState)
est appelé. Lorsque la première instance de l'activité est créée, le bundle est null; et si le bundle n'est pas null, l'activité continue certaines tâches commencées par son prédécesseur.
Android sauve automatiquement le texte dans les champs de texte, mais il ne sauve pas tout, et parfois des bugs subtils apparaissent.
Le plus grand anti-pattern, cependant, est de supposer que onCreate()
ne fait que de l'initialisation. C'est faux, car il doit également restaurer l'état.
Il y a une option pour désactiver ce comportement "re-créer l'activité en cas de rotation", mais cela ne préviendra pas les bugs liés au redémarrage, cela les rendra juste plus difficiles à mentionner.
Notez également que la seule méthode dont l'appel est garanti lorsque l'activité va être détruite est onPause()
. (Voir le graphique du cycle de vie de l'activité dans la documentation.)
Mise à jour : En ce qui concerne Android, le terme "bundle" a deux significations complètement distinctes. L'une est détaillée dans ma réponse originale ci-dessous. L'autre est un bundle d'application. Il s'agit d'un nouveau format de fichier d'archive (avec l'extension .aap) qui contient une application Android ainsi que des métadonnées supplémentaires. Vous pouvez téléverser un fichier de bundle d'application au lieu d'un fichier APK d'application pour distribuer votre application via Google Play. Les bundles d'application ont certains avantages par rapport aux fichiers .apk, mais peuvent ne pas être compatibles avec d'autres magasins d'applications (comme l'Amazon App Store). Ces avantages sont décrits dans le lien vers la documentation inclus dans ma réponse originale.
Réponse originale :
Un Bundle
est très similaire à un objet Map
Java qui fait correspondre des clés String
à des valeurs. Il est utilisé pour passer des informations entre les activités et d'autres composants de l'application. Il est également utilisé par le framework pour capturer et restaurer les informations d'état.
La raison pour laquelle Android n'utilise pas simplement des objets Map
standards pour cela est que Map
est trop flexible ; il peut contenir des objets (comme, par exemple, des flux d'E/S) qui ne peuvent pas être sérialisés. L'API Bundle
restreint les types d'objets pouvant être ajoutés à un bundle de telle manière que le contenu du bundle est garanti d'être sérialisable. Le framework Android repose sur cette propriété.
Je vous suggère de lire la documentation sur Fondamentaux de l'application. Cela explique, entre autres, ce que sont les bundles et les intents et à quoi ils servent.
Les bundles peuvent être utilisés pour envoyer des données arbitraires d'une activité à une autre via des Intents. Lorsque vous diffusez un Intent, les activités intéressées (et d'autres BroadcastRecievers) en seront informées. Un intent peut contenir un Bundle afin que vous puissiez envoyer des données supplémentaires avec l'Intent.
Les bundles sont des mappages clé-valeur, donc en quelque sorte, ils sont comme un Hash, mais ils ne se limitent pas strictement à une seule correspondance String / Objet Foo. Notez que seuls certains types de données sont considérés comme "Parcelable" et ils sont explicitement définis dans l'API Bundle.
C'est la seule réponse à ce jour qui aborde vraiment la question de l'OP, c'est-à-dire ce qu'est un paquet. stackoverflow.com/a/6236801/1588163 donne plus d'informations.
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.