2017-04-19 5 views
0

Ich habe eine Andoid (API 21) Mainactivity, in der ein Thread starten. Durch Drücken einer Taste schließe ich den Thread und die Hauptaktivität. Ist dies eine gute Lösung, Thread zu unterbrechen und Aktivität zu schließen? Ich versucheWie zu korrigieren Stop Android Hauptaktivität auf Thread warten?

mythread.cancel() 
finishAndRemoveTask(); 

zu nennen, aber wenn mainactivity/Programme schließt es abstürzt, weil der Faden noch am Leben ist.

Also, wenn Schaltfläche geklickt wird ich versuche, den Code zu ändern und schreiben:

mythread.interrupt(); 
    finishAndRemoveTask(); 

Ist das eine gute Lösung? (Ich weiß nicht, ob ich mythread.join verwenden(), weil der Faden unendlich läuft ..

In OnCreate i create und starten Sie den Faden

 myThread_read = new thread_read(handler_read); 
    //starting thread 
    myThread_read.start(); 

Ich weiß, ich Runnable verwenden müssen aber diesen Code . Themen-Klasse erweitert der Thread-Code ist:

private class thread_read extends Thread { 
     Handler mHandler; 
     String logString ; 

     protected volatile boolean running; 

     /* constructor */ 
     thread_read(Handler h) { 
      mHandler = h; 
     } 

     public void start() 
     { 
      Logger.WriteString("thread_read", "Starting"); 
      running = true; 
      super.start(); 

     } 

     public void cancel() 
     { 
      Logger.WriteString("thread_read", "Stopping"); 
      running = false; 

     } 


     public void run() { 


      while (running) { 

       try { 
        Thread.sleep(500); // 500 msecs 
       } catch (InterruptedException e) { 
        Thread.currentThread().interrupt(); 
        break; 
       } 

       // do works 
       } 

      } 
     } 
    } 

Antwort

0

Sie können versuchen, den Faden von der AsyncTask Hosting und dann versuchen, die Aktivität zu stoppen Wenn Sie einmal den Faden zu stoppen, nachdem der Auftrag abgeschlossen wurde es tun. auf dem postExecute von asynctask.

Auch kann eine andere Methode versuchen, den Thread durch Interrupt() im Zerstören der Aktivität zu stoppen. Sie können die run-Methode als

while (unterbrochen()) ändern {return;}

Kann beziehen sich auf den folgenden Link How to stop a running thread when Activity on destroy at Android?

0

Sie können versuchen, den Faden von der AsyncTask Hosting und dann versuchen, Stoppen Sie die Aktivität. Wenn Sie den Thread einmal beenden müssen, nachdem der Job abgeschlossen wurde, machen Sie dies auf dem PostExecute von asynctask.

Auch kann eine andere Methode versuchen, den Thread durch Interrupt() im Zerstören der Aktivität zu stoppen. Sie können die run-Methode als

while (unterbrochen()) ändern {return;}

+0

Sie meinen, dass ein mythread.interrupt() entfernen kann; und einfügen mythread.cancel() in OnDestroy Methode ?? @Override öffentliche void onDestroy() { mythread.cancel(); super.onDestroy(); } – Gab74

0

Ja Gab74 .. die mythread.interupt im OnDestroy hinzufügen, indem Sie die onDestroy erstreckt()

und ändern die run Methode des Threads mit While (unterbrochen()) {return;} Das ist eine Logik schreiben, wenn unterbrochen, dann den Thread zu beenden.

Verwandte Themen