Android 打开特定应用程序时启动/停止计时器

Android 打开特定应用程序时启动/停止计时器,android,timer,Android,Timer,我想知道是否有什么方法可以用来确定所选应用程序何时打开/关闭。例如,当此应用程序在后台运行时,如果打开Facebook,则会将其返回到应用程序并启动计时器。任何帮助都将不胜感激 解决此问题的一种方法是验证正在运行的进程列表,并通过使用检查它们的重要性级别,从前台进程到空进程 您感兴趣的当然是前台流程。 引述: 前景进程 用户所需的过程 目前正在做。如果出现以下情况,则认为流程处于前景中: 以下任一条件均为真: 它主办的活动 用户正在与(活动的onResume()方法 (被称为) 它承载一个服务,

我想知道是否有什么方法可以用来确定所选应用程序何时打开/关闭。例如,当此应用程序在后台运行时,如果打开Facebook,则会将其返回到应用程序并启动计时器。任何帮助都将不胜感激

解决此问题的一种方法是验证正在运行的进程列表,并通过使用检查它们的重要性级别,从前台进程到空进程

您感兴趣的当然是前台流程。 引述:

前景进程

用户所需的过程 目前正在做。如果出现以下情况,则认为流程处于前景中: 以下任一条件均为真:

它主办的活动 用户正在与(活动的onResume()方法 (被称为)

它承载一个服务,该服务绑定到 用户正在与进行交互。它承载一个正在“运行中”的服务 前台”-服务已调用startForeground()

它有一个 正在执行其生命周期回调之一的服务(onCreate(), onStart()或onDestroy()

它拥有一个广播接收器 正在执行其onReceive()方法

一般来说,只有少数几个前景 过程在任何给定的时间都存在。他们被杀只是最后一次 如果内存太低,它们无法全部继续运行,请求助。 通常,此时,设备已达到内存分页 状态,因此需要杀死一些前台进程来保持 用户界面响应迅速

问题是,如果它属于最后两类(服务或广播接收器)之一,则可能会出现两个误报。但我相信,这是你能走得越近。您可以通过额外检查来消除这些误报

另一个挑战是知道何时检查这些信息。轮询是一个坏主意,因为您将消耗大量的电池电量,但如果您只在一个短的/特定的时间段内进行轮询,在这个时间段内您将定期轮询,以估计应用程序已运行的时间,则这是可以接受的

[编辑]

这是一个代码片段,演示了如何迭代运行中的流程并确定其重要性级别,以及如何获取与这些流程相关的包

  public void findRunningApps() {
        ActivityManager activityManager = (ActivityManager)     
        context.getSystemService(Activity.ACTIVITY_SERVICE);

        for (RunningAppProcessInfo processInfo : activityManager.getRunningAppProcesses()) {
            if(processInfo.importance == IMPORTANCE_FOREGROUND) {
               for (String packageName : processInfo.pkgList) {

               }
            } 
        }
   }

感谢您提供的信息,我们将对此进行更详细的研究,然后再与您联系。@escull638我添加了一个片段,以说明如何获取您所需的信息。谢谢,非常感谢!