Как постоянно проверять, какое приложение открыто на переднем плане из службы переднего плана моего приложения? - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу создать приложение, которое запускает службу переднего плана, чтобы проверить, какие другие приложения запущены в любое время.

Запустил службы и запустил некоторую логическую часть в другом потоке.Создано уведомление и таймер (цикл), который проверяет запущенные приложения каждые 100 миллисекунд.

@Override
 public int onStartCommand(Intent intent, int flags, int startId) {
  super.onStartCommand(intent, flags, startId);

  new Thread() {
   public void run() {
    startInForeground();
   }
  }.start();


  return START_STICKY;
 }

 private void startInForeground() {
  createNotification();
  startTimer();

 }

Функция startTimer () ниже, которая проверяет, работает ли любое приложение в фоновом режиме.Все хорошо, я могу определить, какое приложение работает.

public void startTimer() {
  ScheduledExecutorService scheduler = Executors
   .newSingleThreadScheduledExecutor();
  scheduler.scheduleAtFixedRate(new Runnable() {

   @Override
   public void run() {
    checkAnyAppOpen();
   }
  }, 0, 100, TimeUnit.MILLISECONDS);

 }

Меня беспокоит - мне нужно снова и снова запускать функцию checkAnyAppOpen () в течение бесконечного периода времени.Так это хорошо?или есть другой способ справиться с этим.Каково влияние этого метода?

Мой второй вопрос - я могу остановить свою службу, но таймер (планировщик) работает постоянно.Как я могу это остановить?Как это может повлиять, если он не остановился, так как я должен снова перезапустить службу после некоторого периода времени, который может длиться от 5 до 24 часов.Я должен снова сделать остановку и перезапустить.

Спасибо

1 Ответ

0 голосов
/ 13 сентября 2018
  1. Я считаю, что для вашего случая использования это применимо. Просто убедитесь, что нет утечек, и сервис закрыт должным образом.
  2. Используйте scheduler.shutdown(), чтобы остановить исполнителя.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...