2014-10-30 5 views
0

У меня есть поток, созданный внутри вторичной активности на Android, как так:прекратить поток при выходе активность (Android)

new Thread(new Runnable() { 
       public void run() { 
        try { 
         String branch=spinner.getSelectedItem().toString(); 

         while(branch.equals(spinner.getSelectedItem().toString())){ 
          System.out.println("----LOOPER."+spinner.getSelectedItem().toString()); 
          GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString()); 
          Thread.sleep(refreshRate);        
         } 
        } catch (InterruptedException e){ 
         e.printStackTrace(); 
        } 
       return; 
       } 
       }).start(); 

проблема в том, что, когда я вернуться к основному виду деятельности этот поток Все еще работает. то, что я сделал на кнопку GoBack, чтобы написать это:

spinner.setSelection(0); 
this.finish(); 

Таким образом, значение блесны изменяется, в результате чего время цикла на резьбе, чтобы вернуться ложным, тем самым выходя нить. Но я не думаю, что это правильный способ сделать это. может ли кто-нибудь предложить что-то другое, или я должен сказать, лучше?

+0

Почему вы думаете, его не правильный путь? –

+0

[Как прекратить поток java изящно?] (Http://stackoverflow.com/questions/3194545/how-to-stop-a-java-thread-gracefully) –

+0

завершить поток – Meenal

ответ

0

Не существует способа, который явно доступен для остановки потока. Ранее были методы остановки потока, но они были устаревшими. Пожалуйста, прочитайте следующую ссылку, чтобы узнать, почему разработчики java этого хотели: http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

В соответствии с этим документом они предпочитают, чтобы вы делали это так, как вы предлагали. Значит, ты не ошибаешься.

1

Вы должны использовать метод прерывания() потока, когда вы покидаете действие.

YourThread.interrupt();

new Thread(new Runnable() { 
       public void run() { 
        try { 
if(!Thread.interrupted()) 
         String branch=spinner.getSelectedItem().toString(); 

         while(branch.equals(spinner.getSelectedItem().toString())){ 
          System.out.println("----LOOPER."+spinner.getSelectedItem().toString()); 
          GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString()); 
          Thread.sleep(refreshRate);        
         } 
        } catch (InterruptedException e){ 
         e.printStackTrace(); 
        } 
       return; 
       } 
       }).start(); 
0
private volatile boolean stopThread; 

    public void run() { 
     String branch=spinner.getSelectedItem().toString(); 
     while (!stopThread) { 
     System.out.println("----LOOPER."+spinner.getSelectedItem().toString()); 
     GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString()); 
     Thread.sleep(refreshRate); 
     } 
    } 


public void stopThread() { 
    stopThread = true; 
    thread.interrupt(); 
} 
+0

Thats почти так, как у меня есть, используя переменную как флаг, не так ли? –

Смежные вопросы