2017-04-12 2 views
-1

J'ai un gestionnaire déclaré en tant que variable globale dans une activité. Ce gestionnaire reçoit des messages d'un thread et met à jour de UI.Le gestionnaire ne met pas à jour l'interface utilisateur après ondetroy()

Tout fonctionne correctement jusqu'à ce que l'application soit envoyée en arrière-plan, onDestroy est appelée. Lorsque je retourne à l'application, le thread continue à envoyer des messages au gestionnaire, il apporte les modifications sur l'interface utilisateur, mais ces modifications ne sont plus affichées.

Je ne veux pas arrêter le fil après une pause, car il doit être jusqu'à lire certaines informations dont j'ai besoin même lorsque l'application est en arrière-plan.

Comment puis-je obtenir ce fonctionnement?

C'est le gestionnaire déclarée comme variable globale:

Handler hRefreshData=new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     edText2 = (EditText) findViewById(R.id.textarea2); 
     edText2.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 
     edText2.setTextSize(20); 
     edText2.setBackgroundColor(Color.rgb(255, 255, 255)); 
     edText2.setText(""); 
     for (int i = 0; i < tag_db_index; i++) { 
      if (tag_db[i].getActive() == TRUE) { 
       edText2.append("[" + i + "]\t"); 
       edText2.append("ANT " + tag_db[i].tag.getAntenna() + "\t"); 
       edText2.append("\n"); 
      } 
     } 
    } 

C'est le fil, a commencé lorsque la presse utilisateur sur le bouton lecture:

thrRead = new Thread() { 
     public void run() { 
      while (bRunningRead) { 

       // El siguiente método realiza sólo lectura (la conexión ya está abierta) 
       aReadTags = lectura(); 
       processTags(); 
       try{ 
        semaforo.acquire(); 
        copyaReadTags(); 
        semaforo.release(); 
       } 
       catch(InterruptedException e) 
       { 

       } 

       Message m = new Message(); 
       if (bRunningRead) 
        hRefreshData.sendMessage(m); 

      } 

     } 
    }; 
    thrRead.start(); 
+0

Montrez votre code. – Piyush

+1

Vous devez effectuer des tâches d'arrière-plan sur un service, une alarme ou un travail, et demander à l'activité/écouter les mises à jour de la tâche lorsqu'elle est visible. Vous utilisez le mauvais mécanisme pour accomplir la tâche –

+0

En savoir plus sur les tâches de fond tondo dans Android. Il y a beaucoup d'informations en ligne. –

Répondre

0

J'ai eu ce travail avec des fils. Je n'utilise pas le gestionnaire, au lieu de cela, j'ai utilisé un broadcastreceiver. Les variables globales dont j'ai besoin, je les sauvegarde au niveau de l'application pour ne pas les perdre quand onDestroy est appelé dans l'activité.