使用DDMS进行Android调试ScheduledThreadPoolExecutor

时间:2012-07-03 21:40:56

标签: android timer threadpool timertask

对于我的Android应用程序,我使用ScheduledThreadPoolExecutor而不是Timer,因为它不受时间变化的影响。

使用Timer,您可以通过为其命名来创建它。 EX:Timer myTimer =新定时器(“TimerA”);

这非常方便,因为在Threads视图中使用DDMS进行调试时,我可以看到哪些线程正在运行...并使用该名称追溯到我的代码。

但是,使用ScheduledThreadPoolExecutor,我似乎无法给它起个名字。因此,当在DDMS中使用Threads视图进行调试时,我看到类似于:“pool-4-thread-1”这样的内容没有意义,我无法使用这样的名称追溯到我的代码。

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:2)

标准Java API不支持命名ThreadPoolExecutor,但是,通过ThreadFactory支持命名ThreadPoolExecutor创建的Thread,请查看here

  

创建新主题

     

使用ThreadFactory创建新线程。如果没有另外指定,则使用defaultThreadFactory(),它创建所有线程都在同一个ThreadGroup中并具有相同的NORM_PRIORITY优先级和非守护进程状态。通过提供不同的ThreadFactory,您可以更改线程的名称,线程组,优先级,守护程序状态等。如果ThreadFactory在通过从newThread返回null请求时无法创建线程,则执行程序将继续,但可能无法执行任何任务。

示例代码:

ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = Executors.newScheduledThreadPool(5, new ThreadFactory() {
  final AtomicInteger threadNumber = new AtomicInteger(1);

  @Override
  public Thread newThread(Runnable r) {
    return new Thread(r, "Foo-" + threadNumber.getAndIncrement());
  }
});

希望这有帮助。