如何检查我的应用程序是否在android(而不是服务)中运行?

时间:2012-11-03 18:36:33

标签: android

问题: 我必须检查我的应用程序是否正在运行(当服务已经在后台运行时)。基于此,我想要开始特定活动或应用程序。

我试过或想出但是失败了 我试图检查当前的运行过程,并根据它尝试确定应用程序是否正在运行。 失败原因:因为我已经在后台运行了服务,所以应用程序运行状态始终为真。

可能的解决方案,但不确定是否可能在android 中 1.如果我们可以用不同的名称(包名)运行服务 2.分别在app start和close上设置一些布尔值为true和false。但这是一个好方法吗?

修改::

很抱歉,如果我之前不是很具描述性。我试着向你解释我到底想要实现的目标。

每当用户点击通知时。在检查我的应用程序是否已启动后,我必须从两个选项中做任何一个选项(不包括服务,因为它们总是在后台运行)。 1.如果我的应用程序已启动,则启动所需的活动。 2.如果app未启动,则必须启动它,然后打开所需的活动。

e.g 我收到了一条消息到达通知。如果我的应用程序启动,我必须显示收件箱,否则我必须启动我的应用程序,然后打开收件箱。

3 个答案:

答案 0 :(得分:2)

虽然问题相当陈旧,但我想发表自己的答案,因为我花了太多时间寻找类似问题的解决方案。我的服务正在传输通过视觉应用程序(相机,GPS等)收集的数据。当用户关闭应用程序时,它必须保持打开状态,因为它需要在应用程序打开时传输尚未传输到服务器的数据。但它必须将其工作模式切换到更软一点(以节省电力)(并且当作业完成时它最终会自动关闭,但这是另一个故事。首先,我尝试从主要活动向此服务发送一些命令当它即将关闭用户的意图。但如果我只是在任务列表中弹出我的应用程序(主页按钮长按,或其他手机上的其他一些),这不起作用。 我发现了另一个解决方对于app的常见对象,我有CommonData类。我注意到如果我写了像

这样的东西
CommonData.runObject = new Object();

在主要活动onCreate中,当点击应用时,此runObject设置为空。

因此,在我的服务中,我只需要告诉CommonData.runObject != null CommonData.runObject == null,看看我的应用是否在运行。

答案 1 :(得分:0)

当您的服务在后台运行时,您的应用程序确实正在运行!如果您想检查您的应用程序的任何活动是forground还是后台,我认为您可以使用Activities的生命周期方法并在{{3}中设置boolean } class或者您可以获得服务中正在运行的任务列表,并检查您的任何活动是否正在运行:

ActivityManager activityManager = (ActivityManager)Monitor.this.getSystemService (Context.ACTIVITY_SERVICE); 
List<RunningTaskInfo> activitys = activityManager.getRunningTasks(Integer.MAX_VALUE); 
isActivityRunning = false; 
for (int i = 0; i < activitys.size(); i++) { 
    if (...) {
        isActivityRunning = true;
        break;
    }
}

但请参阅Application

其他:

this

Check if Activity is running from Service

How to determine if one of my activities is in the foreground

答案 2 :(得分:0)

我会尝试猜测,因为你不清楚,正如哈桑所说,如果你正在运行一项服务,那就是你的应用正在运行,所以当你说app时,它可能是另一个与服务不同的应用程序你可能在谈论一个活动,这可能是前景或背景。

在任何情况下,您可以在服务集内部设置一个静态布尔值为false,然后在您根据应用程序的任何状态和您自己的定义考虑运行应用程序时将其设置为true或false正在运行的应用您需要覆盖要启用它的状态并将布尔值设置为true;如果要禁用它,请覆盖并设置为false。

在这里查看活动生命周期,因为通常你会想要通过活动生命来衡量你的应用程序生命周期,因为它对用户来说是最明显的,但是,其他组件也有其他类似的生命周期,你也可以使用它:

http://developer.android.com/training/basics/activity-lifecycle/index.html