2017-01-18 2 views
0

У меня есть следующий блок кода, который зацикливается на последнем просмотре, я бы хотел остановить его работу и освободить ресурсы после того, как приложение больше не будет на переднем плане.Android Java: как полностью удалить экземпляр ScheduledExecutorService, когда приложение не находится на переднем плане

Со следующим: 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); 
     } 
     }); 
    } 

ответ

1

как сфера ScheduledExecutorService является локальной run, то вы не сможете управлять им с помощью других методов.

Если вы видите https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html, вы увидите, что у них есть экземпляр в качестве поля. На этом поле вы можете позвонить по телефону shutdownNow

Смежные вопросы