【问题标题】:How to check continuously which app is opened in foreground from my app's foreground service?如何从我的应用程序的前台服务连续检查哪个应用程序在前台打开?
【发布时间】:2018-09-13 23:51:09
【问题描述】:

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

启动服务并在不同线程中运行一些逻辑部分。创建了通知和计时器(循环),每 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 小时。我必须再次停止并重新启动。

谢谢

【问题讨论】:

    标签: java android performance service


    【解决方案1】:
    1. 我相信它适用于您的用例。只需确保没有泄漏并且服务已正确关闭即可。
    2. 使用scheduler.shutdown() 停止执行程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多