2012-04-24 2 views
0

Так начинается действие, и я создаю Thread, который проверяет, когда перейти к следующему действию. Но иногда мне нужна эта деятельность, чтобы убить себя. onPause делает это, но после этого Thread все еще жив и по истечении времени запускает новое действие. Можно ли убить эту тему и остановить намерение goToFinals?Как убить поток, запущенный в новом действии

public class Questions extends Activity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String in = getIntent().getStringExtra("time");   
     long tmp = Long.parseLong(in); 
     endTime = (long) System.currentTimeMillis() + tmp; 

     Thread progress = new Thread(new Runnable() { 

      public void run() { 
       while(endTime > System.currentTimeMillis()) { 
        try { 
         Thread.sleep(200); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
       Intent goToFinals = new Intent(Questions.this,End.class); 
         startActivity(goToFinals); 
      } 

     }); 
     progress.start(); 

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     finish(); 
    } 
} 

ответ

2

Есть несколько способов остановить вашу нить. Если вы храните Thread объект, то вы можете вызвать interrupt() на нем:

progress.interrupt(); 

Это может привести к sleep() бросаться в InterruptedException, который вы должны вернуться из, а не только печать трассировки стека. Вы должны также сделать петлю, как:

while(endTime > System.currentTimeMillis() 
    && !Thread.currentThread().isInterrupted()) { 

Вы также могли бы установить какой-то отключения флага:

// it must be volatile if used in multiple threads 
private volatile boolean shutdown; 

// in your thread loop you do: 
while (!shutdown && endTime > System.currentTimeMillis()) { 
    ... 
} 

// when you want the thread to stop: 
shutdown = true; 
0

Для того, чтобы благополучно выйти нить вы должны сначала позвонить thread_instance.interrupt(), а затем вы можете проверить, не прерывается или нет. см это LINK

0

см this поста для глушения Java thread.The способ, которым они рекомендуют, чтобы использовать общий переменный в качестве флага, который запрашивает фоновый поток, чтобы остановить. Затем эту переменную можно установить другим объектом, запрашивающим завершение потока.

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