2016-09-01 5 views
1

Я хотел бы запустить две строки runnables один за другим.android run multiple runnable

Это означает, что когда первая запущенная нить завершает вторую нить, начинается.

DownSpeedTester speedTester = new DownSpeedTester(); 
speedTester.setDownUrl(String.valueOf(urlDownload)); 
new Thread(speedTester).start(); 

UploadSpeedTester uploadSpeedTester = new UploadSpeedTester(); 
uploadSpeedTester.setUploadUrl(String.valueOf(urlUpload)); 
new Thread(uploadSpeedTester).start(); 

Пробовал использовать newSingleThreadExecutor, но это не удалось.

ExecutorService es = Executors.newSingleThreadExecutor(); 
    Future< Boolean> result = es.submit(new Callable<Boolean>() { 
     public Boolean call() throws Exception { 
      //Download 
      DownSpeedTester speedTester = new DownSpeedTester(); 
      speedTester.setDownUrl(String.valueOf(urlDownload)); 
      new Thread(speedTester).start(); 
      return true; 
     } 
    }); 
    try { 
     boolean res = result.get(); 
     if (res == true){ 
      //Upload 
      Log.d("mceeli","UploadSpeedTester"); 
      UploadSpeedTester uploadSpeedTester = new UploadSpeedTester(); 
      uploadSpeedTester.setUploadUrl(String.valueOf(urlUpload)); 
      new Thread(uploadSpeedTester).start(); 
     } 
    } catch (Exception e) { 

    } 
    es.shutdown(); 

Он все еще работает вместе.

Пожалуйста, помогите мне.

+0

Позвоните по второй теме в обратном вызове – Amy

ответ

3

Вы можете использовать AsyncTask для запуска двух нитку один за другим. Но если вы хотите использовать нить, вы можете использовать

private static final int STEP_ONE_COMPLETE = 0; 
private static final int STEP_TWO_COMPLETE = 1; 

... 

private doBackgroundUpdate1(){ 
    Thread backgroundThread = new Thread() { 
     @Override 
     public void run() { 
      // do first step 

      // finished first step 
      Message msg = Message.obtain(); 
      msg.what = STEP_ONE_COMPLETE; 
      handler.sendMessage(msg); 
     } 
    } 
    backgroundThread.start(); 
} 
private doBackgroundUpdate2(){ 
    Thread backgroundThread = new Thread() { 
     @Override 
     public void run() { 
      // do second step 

      // finished second step 
      Message msg = Message.obtain(); 
      msg.what = STEP_TWO_COMPLETE; 
      handler.sendMessage(msg); 
     } 
    } 
    backgroundThread.start(); 
} 
private Handler handler = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) { 
     switch(msg.what){ 
     case STEP_ONE_COMPLETE: 
      doBackgroundUpdate2(); 
      break; 
     case STEP_TWO_COMPLETE: 
      // do final steps; 
      break; 
     } 
    } 
} 
+0

Большое вам спасибо! –

1

Использование одного нити исполнителя, просто не порождают каких-либо больше Thread S:

ExecutorService es = Executors.newSingleThreadExecutor(); 
DownSpeedTester speedTester = new DownSpeedTester(); 
speedTester.setDownUrl(String.valueOf(urlDownload)); 
es.submit(speedTester); 

UploadSpeedTester uploadSpeedTester = new UploadSpeedTester(); 
uploadSpeedTester.setUploadUrl(String.valueOf(urlUpload)); 
es.submit(uploadSpeedTester); 

es.shutdown();