【问题标题】:Android Debugging ScheduledThreadPoolExecutor using DDMSAndroid 使用 DDMS 调试 ScheduledThreadPoolExecutor
【发布时间】:2012-07-04 09:33:08
【问题描述】:

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

使用计时器,您可以通过为其命名来创建它。例如:定时器 myTimer = new Timer("TimerA");

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

但是,使用 ScheduledThreadPoolExecutor,我似乎无法为其命名。因此,在 DDMS 中使用线程视图进行调试时,我会看到类似“pool-4-thread-1”的内容,它没有意义,而且我无法用这样的名称追溯到我的代码。

谁能帮我解决这个问题?

【问题讨论】:

    标签: android timer threadpool timertask


    【解决方案1】:

    标准的 Java API 不支持命名 ThreadPoolExecutor,但是通过 ThreadFactory 支持命名 ThreadPoolExecutor 创建的线程,查看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());
      }
    });
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢!正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2012-01-04
    • 2013-03-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多