La latence de démarrage est une métrique importante pour conserver les utilisateurs actifs par jour et garantir une expérience fluide dès la première interaction. Cela est particulièrement vrai dans les environnements à faible RAM où des compromis de performance peuvent être nécessaires. Toutefois, avant de commencer à améliorer le démarrage d'une application, il est important d'en comprendre les aspects sous-jacents.
Bonnes pratiques
Expédier l'appli avec un profil de référence
Les profils de référence améliorent la vitesse d'exécution du code d'environ 30 % dès le premier lancement en évitant l'interprétation et les étapes de compilation juste à temps (JIT) pour les chemins de code inclus. En expédiant un profil de référence dans une appli, Android Runtime (ART) peut optimiser les chemins de code inclus via la compilation anticipée (ou compilation AOT), ce qui permet d'améliorer les performances pour chaque nouvel utilisateur et chaque mise à jour d'application.
Éviter les initialisations superflues
Évitez les tâches superflues qui pourraient gêner la séquence de démarrage de votre application.
Le scénario le plus probable pour que votre application démarre un processus est son lancement. Toutefois, WorkManager, JobScheduler, BroadcastReceiver, les services liés et la bibliothèque de démarrage AndroidX peuvent également lancer des processus d'application en arrière-plan. Si possible, évitez d'initialiser quoi que ce soit inutilement dans votre classe Application
. De nombreuses bibliothèques proposent une initialisation à la demande, ce qui vous permet de les appeler uniquement en cas de besoin.
Déplacer des tâches du thread UI vers le thread d'arrière-plan
Si certaines tâches prennent plus de temps et bloquent le thread principal, déplacez-les vers un thread en arrière-plan ou utilisez WorkManager pour garantir l'efficacité. Identifiez les opérations qui occupent de longues périodes ou qui prennent plus de temps que prévu. L'optimisation de ces tâches peut considérablement améliorer la latence au démarrage.
Analyser et résoudre les conflits de lecture sévères sur le disque
StrictMode est un outil pour les développeurs qui permet de détecter l'utilisation accidentelle d'un disque ou d'un accès réseau sur le thread principal de l'application, où les opérations de l'interface utilisateur sont reçues et des animations sont effectuées. Une fois que l'outil a détecté des améliorations possibles, vous pouvez arrêter automatiquement l'application ou consigner le cas de non-respect pour une inspection ultérieure.
Éviter les IPC synchrones
Souvent, les longues pauses dans l'exécution de votre application sont causées par des appels de liaison, le mécanisme de communication inter-processus (IPC) sur Android. Dans les versions récentes d'Android, il s'agit de l'une des raisons les plus courantes pour lesquelles le thread UI s'arrête. La solution consiste généralement à éviter d'appeler des fonctions qui effectuent des appels de liaison. Si c'est inévitable, vous devez mettre en cache la valeur ou déplacer la tâche vers des threads en arrière-plan. Pour en savoir plus, consultez Retards de planification des threads.