2

アクティビティの create メソッドで次のコードを使用しています -

        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()

true の場合は終了します。

于 2014-04-10T20:02:35.280 に答える