Android Java:当应用程序不在前台时,如何完全删除ScheduledExecutorService实例

Android Java:当应用程序不在前台时,如何完全删除ScheduledExecutorService实例,java,android,scheduledexecutorservice,Java,Android,Scheduledexecutorservice,我有下面的代码块循环检查上次看到的,我想停止它运行,并在应用程序不再在前台时释放资源 在下面的例子中,runnable并没有停止,它只是继续 ScheduledFuture<?> dfgh; private void getLastSeen() { AsyncTask.execute(new Runnable() { @Override public void run() { ScheduledExecu

我有下面的代码块循环检查上次看到的,我想停止它运行,并在应用程序不再在前台时释放资源

在下面的例子中,runnable并没有停止,它只是继续

ScheduledFuture<?> dfgh;

   private void getLastSeen() {
      AsyncTask.execute(new Runnable() {
         @Override
         public void run() {
            ScheduledExecutorService scheduleTaskExecutor = Executors.newSingleThreadScheduledExecutor();
            dfgh = scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
               public void run() {
                  if (!Presence.screenLocked(A) && Presence.inForeground(A)) {
                     MessageHelper.getLastSeen(RECIPIENT, A);
                     System.out.println("Checking Presence");
                  } else {
                     System.out.println("App not in foreground or screen is locked");
                     dfgh.cancel(true);
 //cancel here doesn't seem to cancel.
                  }
               }
            }, 0, 2, TimeUnit.SECONDS);
         }
      });
   }
ScheduledFuture-dfgh;
私有void getLastSeen(){
AsyncTask.execute(新的Runnable(){
@凌驾
公开募捐{
ScheduledExecutor服务scheduleTaskExecutor=执行者。newSingleThreadScheduledExecutor();
dfgh=scheduleTaskExecutor.scheduleAtFixedRate(新的可运行(){
公开募捐{
如果(!Presence.screenLocked(A)和&Presence.inForeground(A)){
MessageHelper.getLastSeen(收件人,A);
System.out.println(“检查状态”);
}否则{
System.out.println(“应用程序不在前台或屏幕被锁定”);
dfgh.cancel(真);
//在这里取消似乎不是取消。
}
}
},0,2,时间单位为秒);
}
});
}

由于
ScheduledExecutorService
的范围是运行
的本地范围,因此您将无法通过其他方法对其进行控制

如果您看到,您将看到它们将实例作为字段。在这个领域你可以打电话