Android Évitez les fuites de mémoire avec la classe anonyme, le gestionnaire, la tâche de minuterie, le thread


Exemple


Dans Android, chaque développeur utilise la Anonymous Class (Runnable) au moins une fois dans un projet. Toute Anonymous Class a une référence à son parent (activité). Si nous effectuons une tâche de longue durée, l'activité parent ne sera pas détruite tant que la tâche n'est pas terminée.
L'exemple utilise le gestionnaire et la classe anonyme Runnable . La mémoire va fuir lorsque nous quitterons l'activité avant que le Runnable soit terminé.

  new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            // do abc long 5s or so
        }
    }, 10000); // run "do abc" after 10s. It same as timer, thread...

Comment pouvons-nous le résoudre?

  1. Ne faites pas fonctionner longtemps avec la Anonymous Class ou nous avons besoin d'une Static class pour cela et y passer WeakReference (comme l'activité, la vue ...). Thread est le même avec la Anonymous Class .
  2. Annuler le Handler , Timer lorsque l'activité est détruite.