Spawn темы внутри IntentService - PullRequest
0 голосов
/ 31 октября 2018

У меня есть IntentService, что при вызове с ACTION_FETCH_URLS он должен пойти и извлечь фиксированное количество URL (меньше 20) в течение onHandleIntent(). Теперь я понимаю, что, возможно, допустил ошибку, потому что IntentService выполняется в одном потоке, и если я выполняю все запросы в одном и том же потоке, он будет медленным, и я думаю, что, если я создаю новые потоки, он уйдет onHandleIntent(), и это становится беспорядком.

Существует ли какой-либо специализированный класс, который позволяет мне определить задачу, которая должна быть выполнена, и вызвать метод, подобный doTasks(), который затем выполняется параллельно в разных потоках, а затем метод завершается после завершения всех потоков? Таким образом, я мог ждать внутри onHandleIntent().

Редактировать # 1

Я только что узнал о CountDownLatch, и я считаю, что он полностью соответствует моим потребностям. Я могу вызвать await() на CountDownLatch, и он будет блокироваться внутри onHandleIntent(), пока все потоки не выполнят свою работу. Именно то, что я хотел.

Средство синхронизации, позволяющее одному или нескольким потокам ожидать завершается набор операций, выполняемых в других потоках.

 class Driver2 { // ...
   void main() throws InterruptedException {
     CountDownLatch doneSignal = new CountDownLatch(N);
     Executor e = ...

     for (int i = 0; i < N; ++i) // create and start threads
       e.execute(new WorkerRunnable(doneSignal, i));

     doneSignal.await();           // wait for all to finish
   }
 }

 class WorkerRunnable implements Runnable {
   private final CountDownLatch doneSignal;
   private final int i;
   WorkerRunnable(CountDownLatch doneSignal, int i) {
     this.doneSignal = doneSignal;
     this.i = i;
   }
   public void run() {
     try {
       doWork(i);
       doneSignal.countDown();
     } catch (InterruptedException ex) {} // return;
   }

   void doWork() { ... }
 }

Источник: https://developer.android.com/reference/java/util/concurrent/CountDownLatch

Есть ли недостатки этого подхода?

...