7
votes

Passer enums à travers des interfaces AIDL

Comme Enums ne sont pas des types primitifs, quel est le moyen le plus efficace de passer un énumé à travers une interface AIDL à Android? Existe-t-il un moyen de convertir l'énumé en premier en premier?


5 commentaires

Jetez un coup d'œil au commentaire de Charlie Collins. C'est tout à fait vrai: évitez tout au courant que possible.


@Cristian qui doit être pris avec un grain de sel. Enums sont un bon design. Il y a une raison pour laquelle Android n'enlève pas d'énumérums de la langue.


C'est vrai mec. Cependant, je pense qu'ils ne l'ont pas déplacée parce que ce n'est pas si facile. Ils utilisent toujours javac avant de dexer le bytecode. Quoi qu'il en soit ... J'adore les énumes et les utiliser quand ils rendent les choses claires et élégantes.


Enums sont parfaitement corrects dans le code de l'application. Les auteurs-cadres opèrent sous un ensemble de contraintes différents. (Comparez, par exemple, comment MFC évite les virtualités dans de nombreuses classes de base.) Pour Android spécifiquement, les premiers tests ont montré que Enums consommait beaucoup plus de mémoire que les constantes. Le framework les évite. Ymmv. En fait, votre kilométrage va varier , alors faites la bonne chose pour votre application plutôt que de simplement faire ce que tout le monde fait.


Quelque part dans le site Web profond, Google nous a donné le goûter à utiliser Enums dans le code Android. Quelque part dans le quartier de 600 octets pour un énumé. Et les téléphones ont parcouru un long chemin depuis Android 1.0. Fonce.


3 Réponses :


5
votes

types non primitifs, autres que chaîne , nécessite un indicateur directionnel. Les indicateurs directionnels incluent dans , out et inout . .

Jetez un coup d'œil à la documentation officielle de celle-ci: http: // développeur.android.com/guide/developing/tools/aiderl.html#aidlysyntax

En outre, vous pouvez envisager de transmettre la chaîne ou la représentation ordinale de l'énum et la traduire le dos en cas de besoin. Ceci est pris à partir de la Java 2e édition efficace: xxx

dans l'affaire ci-dessus, Opération est un Enum . < / p>


Pour obtenir l'ordinal d'un énumé considérer cet exemple: xxx


3 commentaires

Vous devriez également envisager d'éviter tout enums entièrement (dans un projet Android), si vous pouvez l'aider. développeur.android.com/guide/practices/design/...


Malheureusement, je n'ai pas la possibilité d'éviter les énumes; Ceci est un projet collaboratif. Puis-je extraire l'ordinal d'une valeur d'énorme?


@Charliecollins que Les conseils ont été repris.




1
votes

Oui, vous pouvez réussir Enums via AIDL, mais vous devez mettre en œuvre la mise en œuvre de colis sur le type ENum.

1: une implémentation de modelage. P>

public enum Badges {
   GOLD,SILVER, BRONZE; // Must match @array/badge_states 

   public int toInteger() { return this.ordinal(); }
   public static Badges fromInteger(int value) { return values()[value]);
}


0 commentaires