Android. Qu'est-ce qu'il ne faut pas aimer sur cette plate-forme? C'est gratuit, c'est personnalisable, c'est croissance rapide et il est disponible non seulement sur votre téléphone ou votre tablette, mais également sur votre montre intelligente, votre téléviseur et votre voiture.
Avec le dernier Sucette mise à jour, la programmation Android continue de s'améliorer. La plate-forme a mûri un peu depuis la première AOSP release, et placez la barre des attentes des utilisateurs assez haut. Regarde comme le nouveau Matériel modèle de conception regarde!
Il y a milliers de différents appareils, avec différentes tailles d'écran, architectures de puces, configurations matérielles et versions logicielles. Malheureusement, la segmentation est le prix à payer pour l'ouverture, et il existe des milliers de façons dont votre application peut échouer sur différents appareils, même en tant que programmeur Android avancé .
Indépendamment de cette énorme segmentation, la majorité des bogues sont en fait introduits à cause d'erreurs logiques. Ces bugs sont facilement évités, tant que nous maîtrisons les bases!
Voici un didacticiel de programmation Android pour résoudre les 10 erreurs les plus courantes commises par les développeurs Android.
À mon grand plaisir, cette erreur Android est beaucoup moins courante de nos jours (en partie parce que les clients commencent à se rendre compte que l'époque où Apple définissait toutes les normes de conception est révolue depuis longtemps). Mais encore, de temps en temps, nous voyons une application qui est un clone iOS.
Ne vous méprenez pas, je ne suis pas un évangéliste de la programmation Android! Je respecte chaque plate-forme qui fait avancer le monde mobile. Mais nous sommes en 2014 et les utilisateurs utilisent Android depuis un certain temps maintenant, et ils se sont habitués à la plate-forme. Leur pousser les normes de conception iOS est une stratégie terrible!
Sauf s'il y a une très bonne raison pour briser le des lignes directrices , ne le faites pas. (Google fait cela tout le temps, mais jamais par copier-coller.)
Voici quelques-uns des exemples les plus courants de cette erreur Android:
Ce ne sont là que quelques-uns des beaucoup d'autres petites choses qui peuvent ruiner l'expérience utilisateur.
À moins que vous ne construisiez une application kiosque / promotionnelle pour une seule tablette, il y a de fortes chances que votre application Android ne soit pas bonne sur tous les appareils. Voici quelques conseils de programmation Android à retenir:
Il y a littéralement des milliers de scénarios possibles, mais après un certain temps, vous développez le sens de les couvrir tous avec un poignée de cas .
Vous ne possédez pas des milliers d'appareils? Pas de problème. L'émulateur Android est très efficace pour répliquer des appareils physiques. Encore mieux, essayez Genymotion , il est ultra-rapide et est fourni avec de nombreux appareils prédéfinis populaires.
une application qui prend en charge un programme frontal est parfois appelée lequel des éléments suivants
Avez-vous également essayé de faire pivoter votre appareil? Tout l'enfer peut se déchaîner ...
Intentions sont l’un des composants clés d’Android. C'est un moyen de transmettre des données entre différentes parties de l'application ou, mieux encore, entre différentes applications du système.
Supposons que vous ayez une application de galerie qui peut partager un lien de téléchargement vers certaines images par SMS. Laquelle des deux options semble la plus logique?
Option 1:
Demandez l'autorisation SEND_SMS.
SmsManager
Intent sendIntent = new Intent(Intent.ACTION_VIEW); sendIntent.setData(Uri.parse('sms:' + telephoneNumber)); sendIntent.putExtra('sms_body', x); startActivity(sendIntent);
.Option 2:
Démarrez une intention SMS et laissez une application conçue pour les SMS faire le travail
AndroidManifest.xml
En cas de doute, la meilleure solution est l'option 2!
Cette approche peut être appliquée à presque tout. Partager du contenu, prendre des photos, enregistrer des vidéos, choisir des contacts, ajouter des événements, ouvrir des liens avec des applications natives, etc.
À moins qu'il n'y ait une bonne raison de faire une implémentation personnalisée (par exemple, une caméra qui applique des filtres), utilisez toujours les intentions pour ces scénarios. Cela vous fera gagner beaucoup de temps de programmation et supprimera le memory_needed_in_bytes = 4 * image_width * image_height;
d'autorisations inutiles.
Il y a quelque temps, dans Honeycomb, Android a introduit le concept de fragments . Considérez-les comme des blocs de construction séparés avec leurs propres cycles de vie (plutôt complexes) qui existent à l'intérieur d'une activité. Ils aident beaucoup à l'optimisation pour différents écrans, ils sont facilement gérés par leur activité parent, peuvent être réutilisés, combinés et positionnés à volonté.
Lancer une activité distincte pour chaque écran d'application est terriblement inefficace, car le système essaiera de les garder en mémoire aussi longtemps que possible. Tuer un ne libère pas les ressources utilisées par les autres.
À moins que vous ne souhaitiez approfondir le cœur d'Android et lire Cet article , en préconisant l'utilisation de fragments, vous devez utiliser des fragments chaque fois que possible. Il dit essentiellement que les fragments et chargeurs de curseur ont un bon objectif, mais une mauvaise mise en œuvre.
c corp ou s corp
Le thread principal a un seul objectif: garder l'interface utilisateur réactive.
Bien que la science derrière la mesure de la fréquence d'images que nos yeux / notre cerveau peuvent percevoir soit complexe et influencée par de nombreux facteurs, une règle générale est que tout ce qui est inférieur à 24 ips avec un retard supérieur à 100 ms ne sera pas perçu comme fluide.
Cela signifie que les actions de l'utilisateur auront un retour différé et que l'application Android que vous avez programmée cessera de répondre. Dépouiller l'utilisateur de son contrôle sur l'application entraîne de la frustration, les utilisateurs frustrés ont tendance à donner des commentaires très négatifs.
Pire encore, si le thread principal est bloqué pendant un certain temps (5 secondes pour les activités, 10 pour les récepteurs de diffusion), ANR qui va se passer.
C'était si courant dans Android 2.x que sur les versions plus récentes, le système ne vous permet pas de créer appels réseau dans le fil principal.
Pour éviter de bloquer le thread principal, utilisez toujours les threads de travail / d'arrière-plan pour: 1. les appels réseau 2. le chargement de bitmap 3. le traitement d'image 4. l'interrogation de la base de données 5. la lecture / l'écriture SD
'OK, je n'utiliserai pas le fil de discussion principal. J'écrirai mon propre code qui communique avec mon serveur dans un thread d'arrière-plan. '
Non! Ne faites pas ça! Les appels réseau, le chargement d'images, l'accès à la base de données, l'analyse JSON et la connexion sociale sont les opérations les plus courantes que vous effectuez dans votre application. Pas seulement la vôtre, toutes les applications disponibles. Il y a un meilleur moyen. Rappelez-vous comment Android a mûri et s'est développé en tant que plate-forme? Voici une liste rapide d’exemples:
Si vous avez besoin de quelque chose d'implémenté, il est probable qu'il soit déjà écrit, testé et largement utilisé. Faites des recherches de base et lisez-en Tutoriels de programmation Android avant d'écrire votre propre code!
Génial. Nous avons appris qu'il existe un meilleur moyen de gérer les tâches de longue durée, et nous utilisons des bibliothèques bien documentées à cette fin. Mais l'utilisateur devra encore attendre. C’est inévitable. Les colis ne sont pas envoyés, traités et reçus instantanément. Il y a un délai aller-retour, il y a des pannes de réseau, des paquets se perdent et les rêves sont détruits.
Mais tout cela est mesurable. Les appels réseau réussis sont beaucoup plus probable que celles qui n’ont pas réussi. Alors pourquoi attendre la réponse du serveur avant de traiter la demande réussie? Il est infiniment préférable d’assumer le succès et de gérer l’échec. Ainsi, lorsqu'un utilisateur aime une publication, le nombre de points similaires est immédiatement augmenté, et dans le cas peu probable où l'appel échoue, l'utilisateur est averti.
Dans ce monde moderne, une rétroaction immédiate est attendue. Les gens n'aiment pas attendre. Les enfants ne veulent pas rester assis dans une salle de classe pour acquérir des connaissances dont les bénéfices futurs sont incertains. Les applications doivent s'adapter à la psychologie de l'utilisateur.
Les utilisateurs adorent le contenu! Surtout lorsque le contenu est bien formaté et a l'air bien. Les images, par exemple, sont un contenu extrêmement agréable, principalement en raison de leur propriété de véhiculer mille mots par image. Ils consomment également beaucoup de mémoire. Beaucoup de mémoire!
meilleurs outils pour la visualisation des données
Avant qu'une image ne s'affiche à l'écran, elle doit être chargée dans la mémoire. Les bitmaps étant le moyen le plus courant de le faire, nous allons fournir un guide de programmation Android pour l'ensemble du processus:
Supposons que vous souhaitiez afficher sur votre écran une image que vous venez de prendre avec votre appareil photo. La mémoire totale nécessaire pour cela est calculée avec la formule suivante: ARGB_8888
Pourquoi 4? Eh bien, la configuration bitmap la plus courante / recommandée est RGB_565
. Cela signifie que pour chaque pixel que nous dessinons, nous devons garder 8 bits (1 octet) pour l'alpha, le rouge, la cupidité et le canal bleu en mémoire, afin de l'afficher correctement. Il existe des alternatives, comme le ARGB_8888
configuration qui nécessite la moitié de la mémoire que 4 bytes * 4000 * 3000 = 48 MB
, mais perd la transparence et la précision des couleurs (en ajoutant peut-être une teinte verte).
Supposons que vous ayez un tout nouvel appareil avec écran Full HD et appareil photo 12 MP. La photo que vous venez de prendre mesure 4 000 x 3 000 pixels et la mémoire totale nécessaire pour l'afficher est: 4 * 1920 * 1080 = 8.3 MB
48 mégaoctets de votre RAM juste pour une seule image !? C'est beaucoup!
Prenons maintenant en considération la résolution de l’écran. Vous essayez d'afficher une image de 4 000 x 3 000 sur un écran de 1 920 x 1 080 pixels, dans le pire des cas (affichage de l'image en plein écran), vous ne devriez pas allouer plus de LinearLayout
de mémoire.
Suivez toujours les conseils de programmation Android pour affichage efficace des bitmaps :
Les mises en page ont une présentation XML sous Android. Afin de dessiner du contenu, le XML doit être analysé, l'écran doit être mesuré et tous les éléments doivent être placés en conséquence. Il s’agit d’un processus gourmand en ressources et en temps qui doit être optimisé.
C'est ainsi que le ListView (et plus récemment le RecyclerView ) travaux.
Si une mise en page a été gonflée une fois, le système la réutilise. Mais encore, gonfler la mise en page doit se produire à un moment donné.
Supposons que vous souhaitiez créer une grille 3x3 avec des images. Une façon de faire est une verticale LinearLayout
contenant 3 ImageViews
s de poids égal, chacun d'eux contenant 3 RelativeLayout
avec un poids égal.
tutoriel d'apprentissage automatique pour les débutants
Qu'obtient-on avec cette approche? Un avertissement indiquant que «les poids imbriqués sont mauvais pour les performances».
Il y a un dicton dans le monde de la programmation Android, que je viens d'inventer: 'Avec peu d'effort, toute la hiérarchie peut être aplatie' .
Dans ce cas GridLayout
ou LinearLayouts
remplacera efficacement le minSdkVersion
.
Eh bien, ce n'est pas une erreur, mais c'est une mauvaise pratique.
Android 2.x a été une étape importante dans le développement de cette plate-forme, mais certaines choses doivent être laissées de côté. La prise en charge d'appareils plus anciens ajoute plus de complexité à la maintenance du code et limite le processus de développement.
Les nombres sont clairs, les utilisateurs ont évolué, les développeurs ne doivent pas rester en arrière.
Je sais que cela ne s’applique pas à certains grands marchés dotés d’anciens appareils (par exemple, l’Inde) et que le paramètre
à 14, sur l'application Facebook, signifie laisser quelques millions d'utilisateurs sans leur réseau social préféré. Mais, si vous recommencez à neuf et essayez de créer une belle expérience pour vos utilisateurs, pensez à éliminer le passé. Les utilisateurs qui ne disposent pas des ressources ou qui ressentent le besoin de mettre à niveau leur appareil / système d'exploitation ne seront pas incités à essayer une version supérieure de votre application Android et à dépenser de l'argent dessus.Android est une plateforme puissante qui évolue rapidement. Il n'est peut-être pas raisonnable de s'attendre à ce que les utilisateurs suivent le rythme, mais il est crucial pour les développeurs Android de le faire.
Savoir qu'Android n'est pas que sur nos téléphones ou tablettes est encore plus important. Il est à nos poignets, dans nos salons, dans nos cuisines et dans nos automobiles. Il est de la plus haute importance de bien comprendre les bases avant de commencer à nous développer.