2016-08-27 5 views
0

Я попытался сделать счетчик обратного отсчета, когда пользователь, нажавший кнопку, остановил обратный отсчет.Как я могу остановить поток в Android

Я искал в Интернете метод, чтобы остановить поток, контролирующий обратный отсчет.

Я попытался использовать interrupt, Interrupted и stop, но не удалось остановить поток, используя любой из этих методов.

Вопрос: Как остановить поток, контролирующий счетчик обратного отсчета?

public class Main2Activity extends AppCompatActivity { 

    TextView mTextField; 
    Button stop; 
    Activity myActivity; 
    PrimeThread T1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 
     myActivity=this; 
     mTextField = (TextView) findViewById(R.id.counter); 
     T1=new PrimeThread(); 
     T1.start(); } 

    public void stop(View view){ T1.interrupt(); } 

    class PrimeThread extends Thread { 
     int i=10; 
     public void run() { 
      while(i>0){ 
       myActivity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         mTextField.setText("00:0"+i); 
        } 
       }); 
       i--; 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      }}} 
} 

ответ

1

Вы можете поставить флаг в вашей теме:

public class Main2Activity extends AppCompatActivity { 

    TextView mTextField; 
    Button stop; 
    Activity myActivity; 
    PrimeThread T1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 
     myActivity=this; 
     mTextField = (TextView) findViewById(R.id.counter); 
     T1=new PrimeThread(); 
     T1.start(); } 

    public void stop(View view){ T1.stopRunning(); } 

    class PrimeThread extends Thread { 
     int i=10; 
     boolean running = false; 
     public void run() { 
      running = true; 
      while(running && i < 10){ 
       i++; 
       myActivity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         mTextField.setText("00:0"+i); 
        } 
       }); 
       i--; 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     public void stopRunning(){ 
      running = false; 
     } 
    } 
} 
+0

это будет бесконечный цикл, и мне нужно противостоять вниз всего за 10 секунд, и пользователь может остановить его до 10 сек или пусть это через 10 секунд stop автоматически –

+0

Я обновил свой ответ, проверьте: D –

+0

он работал для меня после некоторого редактирования .. Спасибо ^^ –

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