线程和电池

时间:2011-07-21 11:57:12

标签: android power-management

我有1个问题和2个实施选项,我想知道哪个是Android环境中最好的(基本最佳做法,哪个使用更少的电池)。

我的问题: 我有4个Runnable实现,Runnable有一个需要在不同线程中执行的任务列表。 那些Runnable将在很长一段时间内没有任务,然后执行很多任务(每个Runnable按顺序执行他们的任务),然后很长时间没有任何事情等等......

第一次实施

我的第一个实现是创建4个线程。每个线程都有1个Runnable。每个线程都运行所有任务,当列表为空时,Runnable暂停线程(使用wait()),当另一个任务被添加到列表中时线程被唤醒(使用notify())。 以下是Runnable的运行方法的代码:

  public void run() {
    while (!terminated) {
      while ( taskList.size()> 0 ) {
        Task task = taskList.get(0);
        taskList.remove(task);
        handleTask(task);
      }

      synchronized(taskList) {
         if (taskList.size()==0)
           taskList.wait();
      }
    }
  }

第一个问题:处于暂停状态的线程是否使用了大量资源?

第二次实施

在我的第二个实现中,我考虑使用Executors.newCachedThreadPool()(如在AsyncTask实现中)。基本上,当我的Runnable有任务要运行时,我会向一个线程询问一个线程,系统负责为我提供一个可用线程并在一段时间不活动后将其销毁。 因为我的4 Runnable将有很长一段时间没有任务(execpt可能是1 Runnable)我很确定我的池的行为将是这样的:

  • 总是1个线程忙
  • 创建1个帖子,删除1个帖子,
  • 创建2个帖子,删除2个步骤,
  • 创建1个帖子......

线程可能永远不会被重用(除非我设置了很长一段时间不活动)。

那么什么是最佳选择?只有4个线程将大部分时间用于暂停状态或创建/销毁大量线程但仅在我需要时才使用它们。

感谢您的帮助,

JimBoy。

1 个答案:

答案 0 :(得分:0)

让您的线程处于暂停状态。这样,他们就不会占用任何资源。除非有工作要做,否则不要让线程忙。

然而,看看你在那里做了什么,听起来你可能想要查看BlockingQueue的子类。