Arrêtez d’utiliser Post / PostDelayed dans vos vues Android – Meilleure programmation
Jusqu’à présent, je n’ai mentionné que postDelayed()
. Tome, post()
est de loin l’API la plus mal utilisée que j’ai jamais vue lorsqu’elle est appliquée à un View
.
Pourquoi utiliser post()
quand il n’y a pas de retard attaché? Rappelles toi Handler
est la mise en file d’attente des messages dans un Looper
. La publication mettra le message en file d’attente et le livrera à la trame suivante.
Habituellement, j’ai vu des développeurs l’utiliser parce que la vue n’était pas présentée. Imaginez que vous souhaitez animer une vue dès qu’elle apparaît. Vous avez besoin de sa position et / ou de sa taille, selon l’animation que vous souhaitez réaliser.
Vous devez attendre que la vue soit mesurée. Vous déléguez donc l’animation à l’image suivante et croisez les doigts pour que la vue soit prête. Avec cette solution, deux choses ressortent:
- Vous n’avez aucune garantie que votre vue sera mesurée sur la prochaine image.
- Ce code semble inégale.
Comme postDelayed()
, il existe des mécanismes plus fiables. Tu devrais utiliser ViewTreeObserver
à la place, en particulier les deux rappels suivants:
Vous devez être prudent lorsque vous utilisez ces méthodes. Vous risquez de créer des fuites de mémoire si vous oubliez de supprimer l’écouteur une fois que vous avez effectué votre action.
Encore mieux, utilisez Extensions KTX, et laissez-les s’occuper du passe-partout pour vous.
C’est tout le monde! Je peux paraître sévère lorsque je plaide pour l’interdiction de ce mécanisme. À tout le moins, je vous encourage à les chasser et à vous demander s’ils sont adaptés à la tâche.