2

我在活动的创建方法中使用下一个代码-

        scheduleTaskExecutor = Executors.newScheduledThreadPool(5);


    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
      public void run() {
       Intent intent = new Intent("com.eample.one.services.action.check");
       startService(intent);
      }
    }, 0, 5000, TimeUnit.MILLISECONDS);

如您所见,我每 5 秒用它调用一次服务。

我已经像这样在清单中声明了服务-

  <service
        android:name="com.eample.one.services.CheckService"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.eample.one.services.action.check" />

        </intent-filter>
    </service>

现在,在我声明了 ScheduledExecutorService 的同一个活动中,我有一个退出按钮。

当按下它时,我试图停止 ScheduledExecutorService ,就像这样 -

    scheduleTaskExecutor.shutdownNow(); 
            finish();

甚至

scheduleTaskExecutor.shutdown(); 
   finish();

finish() 当然是完成活动。

但问题是 scheduleTaskExecutor 在按下该按钮后不会停止。

任何想法为什么会这样?

感谢您的任何帮助

4

1 回答 1

0

ExecutorService.shutdownNow()的文档包含以下段落:

除了尽最大努力停止处理正在执行的任务之外,没有任何保证。例如,典型的实现将通过 Thread.interrupt() 取消,因此任何未能响应中断的任务可能永远不会终止。

由于您的 Runnable 正在启动一个 Android 服务(在新线程中),该服务应该测试

Thread.currentThread().isInterrupted()

如果这是真的,定期退出。

于 2014-04-10T20:02:35.280 回答