Cet article a été initialement publié sur CodeProject.com

Comment résoudre les problèmes de qualité d'application avec les signes vitaux Android (2e partie)

Message 2 de 2: Comment la correction des collisions et des verrous de réveil inutiles peuvent améliorer les performances du Play Store

Je suis ravi de constater que de plus en plus d’entre vous rencontrent des difficultés pour résoudre les problèmes de qualité des applications à l’aide de la section Informations vitales sur Android de la console Google Play. Depuis mon premier article sur les fonctions vitales d’Android, nous avons apporté des améliorations pour vous apporter de nouvelles métriques et fonctionnalités. Dans cet article, je commencerai par un aperçu des nouveautés, puis nous expliquerons comment travailler avec les verrous de blocage et les blocages bloqués.

Quoi de neuf dans les fonctions vitales d’Android

Nous avons annoncé de nouvelles fonctionnalités essentielles pour Android sur Google I / O 2018. Ces améliorations comprenaient deux nouveaux domaines de performances, des améliorations des informations métriques existantes et un moyen de vous avertir des modifications inattendues de vos fonctions vitales Android.

Critères de catégorie

La mesure de ce qui constitue un «bon» (faible) ou un «mauvais» niveau (vital) dans une application dépend en grande partie de la catégorie du Play Store dans laquelle elle se trouve. Par exemple, les applications de la catégorie «Jeux de société» ont: , en moyenne, une latence au démarrage inférieure à celle des applications classées dans la catégorie «Jeux de course». C’est la raison pour laquelle les fonctions vitales d’Android affichent désormais des critères de catégorie afin que vous puissiez voir les performances de votre application par rapport aux autres applications de la même catégorie.

Détection d'une anomalie

Un changement soudain dans le comportement de votre application n’est pas une bonne chose. Pour vous aider à maîtriser rapidement ces situations, chaque fois que les fonctions vitales d’Android détectent un pic soudain dans un état vital, il vous alerte dans la Console de jeu et par courrier électronique. Vous pouvez ensuite visiter les fonctions vitales d’Android pour voir ce qui se passe et vous attaquer à la cause.

Refus de permission

Consultez le pourcentage de personnes qui ont refusé une demande d'autorisation émise par votre application. Lorsque le nombre de refus est élevé, vous pouvez examiner la conception de votre application pour voir si, par exemple, une meilleure mise en évidence de la raison de l'autorisation permettra aux utilisateurs d'être plus sûrs de l'accorder.

Temps de démarrage de l'application

Même si vous proposez des fonctionnalités exceptionnelles ou une expérience de jeu exceptionnelle, les utilisateurs ne voudront pas s’en servir si votre application démarre trop lentement. Pour vous aider à comprendre si cela pourrait constituer un défi pour votre application, cette nouvelle zone de performances indique la rapidité avec laquelle votre application ou votre jeu démarre à partir des trois types de démarrage d'application: démarrage à froid, lorsque votre application n'a pas été utilisée récemment et qu'elle n'est pas utilisée récemment. mis en cache en mémoire; démarrage à chaud, lorsque votre application est en mémoire, mais que l'activité doit être recréée; et démarrage à chaud, lorsque l'application et Activity sont en mémoire lorsque l'utilisateur a accédé à l'application.

Lorsque vous rencontrez des problèmes de démarrage dans les fonctions vitales d'Android, utilisez les nouveaux outils Android Profiler d'Android Studio 3.2, tels que le profilage du processeur au démarrage de l'application et Systrace, pour localiser les problèmes de latence de démarrage.

Essentiels essentiels

Tous les éléments vitaux sont importants pour les applications de haute qualité. Toutefois, quatre mesures peuvent être votre priorité: nombre excessif de réveils, ANR, blocage du réveil en arrière-plan bloqué et crash. Les excès de réveil et les ANR ont fait l’objet de mon premier article. Alors, je vais maintenant regarder les verrous de réveil et les crashs.

Réveil des serrures

Historiquement, le travail de fond dans Android reposait sur la création de services en arrière-plan selon les besoins, qui étaient exécutés aussi longtemps que nécessaire - parfois appelés services gratuits. Des verrous de réveil ont été utilisés lors de l'exécution de ces services d'arrière-plan pour empêcher le processeur et les radios de l'appareil de s'éteindre.

L'utilisation des verrous de réveil de cette manière n'est pas optimale. Les applications peuvent planifier leurs services trop souvent et finissent par s'exécuter pendant trop longtemps en utilisant des ressources, telles que la mémoire. Cette utilisation des ressources entraîne souvent une dégradation des performances du périphérique et une consommation excessive de la batterie, en raison de l'utilisation accrue du processeur et de la radio et du fait qu'elles empêchent le périphérique de dormir.

Android Vitals vous fournit des détails sur les verrous de réveil partiels, acquis par votre application via la classe PowerManager, sur les pages de verrous Stuck Wake et de verrous Stuck Wake (arrière-plan). Un verrouillage de réveil partiel garantit le fonctionnement du processeur, mais le rétroéclairage de l'écran et du clavier peut s'éteindre.

Dans les rapports, vous voyez le pourcentage de sessions de batterie (la période entre deux charges complètes de l'appareil) affectées par des verrous de sillage bloqués. Les informations incluent le pourcentage de sessions affectées au cours des deux périodes précédentes de 30 jours, des tests comparatifs illustrant les performances de votre application par rapport aux 1 000 applications les plus utilisées sur Google Play (en nombre d'installations), un graphique des sessions affectées au fil du temps et (non affichées). dans la capture d'écran) une série de ventilations par critères tels que la version de l'application, la version du système d'exploitation Android et le périphérique.

Si les repères montrent que la partie des sessions de votre application affectée par des verrous de blocage bloqués se situe dans les 25% inférieurs, commencez à penser à améliorer votre application.

Comme mentionné dans mon premier article, depuis l'introduction de JobScheduler dans Android 5.0, le meilleur conseil recommandé consiste à abandonner l'utilisation des alarmes et des services gratuits. À partir d'Android Oreo, ce déplacement devient obligatoire, car votre application ne peut plus démarrer un service en arrière-plan (cela entraînerait une exception). De même, éloignez vos applications de l'utilisation des verrous de réveil, car il existe désormais de meilleures alternatives pour la plupart des cas d'utilisation. Ainsi, plutôt que d'utiliser des verrous de réveil, nous vous recommandons ce qui suit pour votre application:

  • Utilisez JobScheduler ou l'API WorkManager lorsqu'un travail doit être exécuté en arrière-plan. L'utilisation de ces fonctionnalités maintiendra un verrou de réveil pour le travail en cours d'exécution.
  • Planifiez une diffusion AlarmManager lorsque vous souhaitez exécuter une tâche en arrière-plan à une heure fixe ou à des intervalles réguliers. AlarmManager maintient un verrou de réveil aussi longtemps que votre méthode BroadcastReceiver.onReceive () est en cours d'exécution.
  • Ajoutez FLAG_KEEP_SCREEN_ON à n’importe quelle fenêtre dans laquelle vous souhaitez conserver l’écran pendant qu’une personne regarde une activité dans votre application. Par exemple, lors de la lecture d'un livre électronique. Avec cette méthode, le système nettoie le verrou de réveil lorsque l’activité n’est plus visible.

Lorsque vous devez gérer vous-même un verrouillage de réveil (par exemple, lorsque vous utilisez un service de premier plan de longue durée pour lire une piste audio), n'oubliez pas de suivre les règles suivantes:

  • Utilisez PARTIAL_WAKE_LOCK, n’utilisez pas les types de verrous de veille obsolètes.
  • Spécifiez un délai d'expiration lorsque vous obtenez un verrou de réveil. Ainsi, si votre application ne le libère pas, le système le nettoie à l'expiration du délai.
  • Give Wake Locks propose une balise descriptive statique, telle que com.myapp: my Wake Lock pour obtenir le meilleur rapport possible sur le verrouillage du sillage dans Android. N'ajoutez pas de compteurs ni d'autres données dynamiques à la balise. Avec de bonnes balises descriptives, Android Vitals regroupe (combine) des verrous de sillage similaires pour vous donner une image précise du comportement de chaque verrou de sillage.
  • Libérez les verrous de réveil lorsqu'ils ne sont plus nécessaires. N'oubliez pas que des erreurs peuvent également rendre le verrouillage de réveil inutile. Une bonne approche pour gérer les erreurs consiste à coder de manière défensive et à encapsuler les appels dans un essai {…} finally {wakeLock.release (); } bloquer.

Les accidents

Vitals Android fournit à la fois des vues sommaires et détaillées des accidents. Dans les pages Taux de crash et Taux de crash multiple, vous voyez les données de crash combinées avec les données d'utilisation pour créer une métrique normalisée.

Outre ces informations récapitulatives, vous pouvez également consulter les détails des incidents en temps réel sur la page ANR et incidents.

Comme pour les verrous de sillage bloqués en arrière-plan, la mesure clé pour comparer votre taux d'accidents est le seuil de mauvais comportement. Si le taux de crash de votre application dépasse le seuil de mauvais comportement, nous vous recommandons de traiter les crashs en priorité.

Il existe de nombreuses raisons pour lesquelles votre code peut générer une exception et bloquer votre application. Il n’est donc pas pratique de discuter et de proposer une solution à tous ici. Je peux cependant donner quelques conseils généraux pour éviter les collisions.

Android Vitals est un excellent moyen d’obtenir des informations sur les accidents les plus courants et sur le nombre de personnes touchées. Android Vitals présente un gros avantage: il capture les accidents qui se produisent avant que les kits de développement logiciel (SDK) de rapports d’incidents tiers ne puissent être initialisés.

Si vous souhaitez plus d'informations pour vous aider à reproduire, à déboguer et à résoudre les incidents, envisagez d'utiliser Firebase Crashlytics. Cet outil fournit des informations sur ce qui se passe dans votre application au moment d’un crash. Pour ce faire, Firebase Crashlytics s'intègre à Firebase Analytics et vous permet d'ajouter une journalisation personnalisée à inclure aux rapports d'incident.

Mon conseil clé pour éviter bon nombre des causes courantes des accidents est le suivant:

  • Ne pas réinventer
  • Passer à Kotlin
  • S'en tenir aux API publiques

Ne réinventez pas les modèles de code courants

Pourquoi courir le risque de commettre des erreurs lors de la codification d’une tâche courante, alors que des bibliothèques de haute qualité, peu susceptibles de provoquer un plantage, sont facilement disponibles et faciles à réutiliser.

Une bonne source de bibliothèques pour la plupart des choses que vous voulez faire dans votre code est Android Jetpack, un ensemble de bibliothèques pouvant servir de base à la plupart des applications Android. Vous pouvez compter sur Android Jetpack pour de nombreuses tâches courantes, telles que la gestion du cycle de vie des activités, la navigation, l'exécution de travaux en arrière-plan, les opérations de base de données, le chargement de données à partir de sources externes, etc. Vous n'êtes pas obligé de vous limiter aux bibliothèques développées par Google. Il existe de nombreuses bibliothèques géniales, testées et open source, que vous pouvez utiliser dans vos applications.

Envisagez de passer de Java à Kotlin

L'année dernière, à I / O, nous avons annoncé qu'Android prenait en charge Kotlin. Nous poursuivons cet investissement avec les améliorations apportées au support Kotlin. Le but ultime est de rendre les développeurs plus productifs, du moins en partie, en évitant certaines erreurs de codage courantes susceptibles de provoquer des pannes.

Un des grands avantages de Kotlin est qu’il intègre des informations de nullabilité dans le système de types du langage. Avec les appels null-safe et les vérifications NULL au moment de la compilation, vous pouvez être plus sûr que votre code ne provoquera pas d'exception NullPointerException au moment de l'exécution. Je vous encourage à essayer Kotlin si vous ne l’avez pas déjà fait. Vous pouvez commencer à l'ajouter à votre application lentement. Il n'est pas nécessaire de remplacer tout votre code Java car Kotlin offre une grande interopérabilité avec Java.

S'en tenir à l'utilisation des API Android publiques

Les API Android publiques sont les classes et les méthodes publiques documentées sur le site de développement Android. Ces API sont garanties d'être disponibles et de fonctionner sur tous les appareils Android certifiés. Les méthodes privées ou cachées, auxquelles on peut accéder en utilisant la réflexion, peuvent être une grande source de crash. Le problème avec ces méthodes est qu’elles ne sont pas garanties d’être disponibles sur les appareils et changent ou cassent souvent avec chaque mise à jour Android. Donc, ils sont bien pour expérimenter, mais nous recommandons de les éviter dans les applications publiques du Play Store.

En raison de problèmes liés aux méthodes privées ou cachées, dans l'aperçu du développeur Android P et pour toutes les éditions futures d'Android, l'accès à ces API privées non documentées est restreint et vos applications peuvent cesser de les utiliser immédiatement pour rester compatibles. Si vous souhaitez en savoir plus, consultez l’aperçu du site «Restrictions sur les interfaces non SDK».

Un dernier mot

Android Vitals est là pour vous aider à créer des applications de meilleure qualité qui engagent et conservent plus d'utilisations afin que vous puissiez créer une entreprise dynamique. Au cours de mes deux articles, je vous ai donné des informations essentielles sur les quatre points essentiels: excès de réveil, ANR, blocage du sillage de fond et blocages. J'ai également examiné les fonctionnalités récemment ajoutées aux fonctions vitales d'Android.

Espérons que, en suivant les recommandations et les idées présentées dans cet article, il vous aidera à mieux comprendre les fonctions vitales Android de vos applications et à les utiliser pour améliorer la qualité de votre application.

Si vous souhaitez en savoir plus, consultez l’enregistrement de données vitales sur Android: performances de l’application de débogage et récompenses pour une session Google I / O 2018 pour laquelle je co-ai présenté Joel t Newman et Fergus Hurley. Vous pouvez également apprendre davantage de meilleures pratiques pour les applications et jeux Android à partir de Google Play sur le blog Medium.

Qu'est-ce que tu penses?

Si vous avez des idées sur les fonctions vitales d’Android ou sur l’une de ses nouvelles fonctionnalités, faites-le-nous savoir en utilisant Twitter #AskPlayDev. Nous vous répondrons de @GooglePlayDev, où nous partageons régulièrement des informations et des conseils pour réussir sur Google Play.