Comprendre quel chemin prendre nécessite de répondre non seulement à la question clé de "pourquoi" de CommonsWare, mais aussi à la question de "à quoi?" vous le passez.
La réalité est que la seule chose qui peut passer à travers les bundles est des données brutes - tout le reste est basé sur des interprétations de ce que ces données signifient ou pointent. Vous ne pouvez pas littéralement passer un objet, mais ce que vous pouvez faire est l'une des trois choses suivantes :
1) Vous pouvez décomposer l'objet en ses données constitutives, et si ce qui se trouve de l'autre côté a connaissance du même type d'objet, il peut assembler un clone à partir des données sérialisées. C'est ainsi que la plupart des types communs passent à travers les bundles.
2) Vous pouvez passer une poignée opaque. Si vous le passez dans le même contexte (bien que l'on puisse se demander pourquoi s'embêter) ce sera une poignée que vous pouvez invoquer ou déréférencer. Mais si vous le passez au travers de Binder vers un contexte différent, sa valeur réelle sera un nombre arbitraire (en fait, ces nombres arbitraires sont numérotés séquentiellement depuis le démarrage). Vous ne pouvez rien faire d'autre que le suivre, jusqu'à ce que vous le renvoyiez au contexte d'origine qui permettra à Binder de le transformer à nouveau en la poignée d'origine, la rendant ainsi à nouveau utile.
3) Vous pouvez passer une poignée magique, comme un descripteur de fichier ou une référence à certains objets du système d'exploitation, et si vous définissez les bons indicateurs Binder créera un clone pointant vers la même ressource pour le destinataire, qui pourra réellement l'utiliser de l'autre côté. Mais cela ne fonctionne que pour quelques types d'objets.
Le plus probable est que vous passez votre classe juste pour que l'autre côté puisse le suivre et vous le rendre plus tard, ou que vous le passez à un contexte où un clone peut être créé à partir de données constitutives sérialisées... sinon vous essayez de faire quelque chose qui ne va tout simplement pas fonctionner et vous devez repenser toute l'approche.
2 votes
Je dois transmettre une référence à la classe qui effectue la majorité de mon traitement à travers un bundle - Pourquoi ?
1 votes
J'ai un objet (DataManager), qui gère un serveur et exécute quelques back-ends pour certaines interfaces graphiques. Chaque fois qu'une nouvelle connexion est établie, je veux que l'utilisateur puisse démarrer une nouvelle activité qui répertorie dans ListView toutes les connexions actives et permet à l'utilisateur d'en choisir une. Les données résultantes seront ensuite liées à une nouvelle interface graphique. C'est vraiment juste un sélecteur d'apparence pour l'arrière-plan.
3 votes
Si vous travaillez avec la même instance d'un objet sur plusieurs activités, vous voudrez peut-être envisager le patron singleton. Il y a un bon tutoriel ici.