如何连续检查我的应用程序的前台服务在前台打开了哪个应用程序?

时间:2018-09-13 15:15:35

标签: java android performance service

我想制作一个可以启动前台服务的应用程序,以便随时检查哪些其他应用程序正在运行。

启动服务并在不同的线程中运行一些逻辑部分。创建了通知和计时器(循环),它们每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 :(得分:0)

  1. 我相信您的用例是适用的。只需确保没有泄漏并且服务已正确关闭。
  2. 使用scheduler.shutdown()停止执行程序。