2012-11-09 8 views
5

Ich möchte einen bestimmten Thread töten, aber kann nicht herausfinden, eine Möglichkeit, es zu arbeiten. Ich schließe alle Informationen ein, auch wenn es nicht wichtig scheint:Android Kill bestimmten Thread auf Action-Leiste Ereignis

Ich benutze Aktionsleiste Sherlock und möchte einen Thread auf einem Aktionsknopf Ereignis beenden. Also, ich habe:

Thread myThread; 
    myThread = new Thread(new Runnable(){ 
     public void run(){ 
       functionX(); 
     } 
     }); 
    myThread.start(); 

Dieser Thread ist ein langer laufender Thread, und funcionX() erstellt auch einige neue Threads. Ich will den Thread töten, wenn:

public boolean onOptionsItemSelected(MenuItem item){ 
    switch (item.getItemId()) { 

    case android.R.id.home: 
     myThread.interrupt(); 
     break; 
    }; 

Ich habe mit ExecutorService versucht, sende mit (runnable) für ein zukünftiges Ergebnis und Future.cancel aber tue scheint nicht zu funktionieren. Ich sollte auch erwähnen, dass functionX() http get Anfragen verwendet, um Daten von einem JSON-Dienst zu erhalten.

Antwort

4

gibt es mehrere Möglichkeiten, wie Sie können dies tun, einige von ihnen kann wie sein

  1. Statt Thema Verwendung Timertask und rufen timeTask.cancel() - für
  2. Im run() -Methode Unterbrechung von der Faden, halten Sie einen boolean Wert überprüft, um zu bestimmen, ob der Thread beendet werden soll, und dann können Sie rufen eine Ausnahme zu unterbrechen oder besser werfen
+0

+1. Vorschlag 2 ist, was ich verwenden würde. Wenn Sie einen Thread schnell loopen, fügen Sie ihn einfach auf der obersten Ebene ein, ansonsten haben Sie ein paar durch den Code. Vor prozesshungrigen Abschnitten. – Doomsknight

+0

Danke. Ich werde mit Technik 2 gehen. –

Verwandte Themen