2014-01-24 3 views
0

Я работаю с развитием Android. У меня есть поток, который я хотел бы возобновить или остановить в зависимости от нажатия кнопки, но я не знаю, почему мой поток не возобновит ... Вот кодКак мне возобновить и приостановить эту тему?

public class MainActivity extends Activity { 

private Thread clientThread; 

Boolean running = true; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    clientThread = new Thread(new Client()); 
    clientThread.start(); 

} 

@SuppressLint("NewApi") 
class Client implements Runnable { 

    @Override 
    public void run() 
    { 
     try { 
      while (running == true) { 

      //get sensor data here 

      if (fsensor3 > 200) 
      { 
       running = false; //To stop thread from repeating 
       new MyVoltageAlert().execute(fsensor3); 
       //What do I do here? 
      } 

      runOnUiThread(new Runnable() 
      { 
       @Override 
       public void run() { 
        //UI stuff here 

       } 
      }); 
      } 

     } 
     catch(Exception e){ 

      e.printStackTrace(); 
     } 

    } 


}//End Client Thread 

class MyVoltageAlert extends AsyncTask<Integer, Void, Integer>{ 

    @Override 
    protected Integer doInBackground(Integer... params){ 
     return params[0]; 
    } 

    @Override 
    protected void onPostExecute(Integer result) { 
     super.onPostExecute(result); 
     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 

     builder.setMessage(result + "mv") 
     .setTitle("Sensor Warning!"); 
     // Add the buttons 
     builder.setPositiveButton("Continue", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
         //What do I do here? 
         // running = true; 
       } 
      }); 
     builder.setNegativeButton("Stop", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
         //What do I do here? 
         // running = false; 
       } 
      }); 

    // Create the AlertDialog 
    AlertDialog dialog = builder.create(); 
    dialog.show(); 
    } 
    } 
} 

Моя проблема заключается в том, что, когда уведомление появляется и просит пользователя остановиться или продолжить, поток больше не работает, даже если для запуска снова установлено значение true. Я знаю, что поток не может ждать в окне уведомлений, но почему это так, когда пользователь устанавливает значение running в true, код не запускается снова?

+0

Я уверен, что вам нужно изменить на volatile Boolean running = true; –

+0

Я изменил его, но когда я нажимаю кнопку «Продолжить» в уведомлении, поток все еще не запускается снова. – user3166938

+0

вам не нужно использовать clientThread. MyVoltageAlert - это один из видов фоновой темы. –

ответ

0

Посмотрите на этих кодов:

if (fsensor3 > 200) 
     { 
      running = false; //To stop thread from repeating 
      new MyVoltageAlert().execute(fsensor3); 
      //What do I do here? 
     } 

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

+0

Если я не устанавливаю его в false, то цикл продолжает работать, и я получаю несколько уведомлений, когда я устанавливаю его в false, он останавливает цикл от запуска снова. Я просто не знаю, как заставить поток повторить после того, как это значение установлено в false. – user3166938

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