2017-09-11 2 views
0

J'ai remarqué que le gestionnaire de la vue n'est pas effacé lorsque la vue est détruite. En regardant cet exemple de code:Le gestionnaire de la vue n'est pas effacé lorsque la vue est détruite

Handler viewHandler = view.getHandler(); 
if (viewHandler != null) { 
    viewHandler.post(new Runnable() { 
     @Override 
     public void run() { 
      view.doSmth(); 
     } 
    }); 
} 

rare sur occassion, il pourrait jeter l'intérieur NullPointerException méthode run().

Avez-vous des solutions à ce problème, qui n'est pas en créant un gestionnaire distinct dans chaque classe (et en le gérant manuellement) chaque fois que je veux effectuer une action sur le thread UI?

Répondre

0

Essayez ce code

Handler viewHandler = view.getHandler(); 
    if (viewHandler != null) { 
     Runnable runnable=new Runnable() { 
      @Override 
      public void run() { 
       view.doSmth(); 
      } 
     }; 
     viewHandler.post(runnable); 
    } 

Et dans onStop()

@Override 
protected void onStop() { 
    super.onStop(); 
    viewHandler.removeCallbacks(runnable); 
    } 
+0

Le point est que je veux que ce soit indépendant du cycle de vie 'Activity'. –

+0

Les gestionnaires d'écriture sans référence provoqueront une fuite de mémoire dans l'application. – Anonymous