IntentService中的生成线程

时间:2018-10-31 13:47:35

标签: java android multithreading intentservice android-intentservice

我有一个IntentService,当用ACTION_FETCH_URLS调用时,它应该在onHandleIntent()期间获取固定数量的URL(小于20)。 现在我意识到我可能犯了一个错误,因为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

这种方法是否有缺点?

0 个答案:

没有答案