4

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

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

可能的解决方案,但不确定在 android 中是否可行 1. 如果我们可以通过不同的名称(包名称)运行服务 2. 在应用程序启动和关闭时分别将一些布尔值设置为 true 和 false。但这是一个好方法吗?

编辑::

抱歉,如果我之前的描述不是很详细。我试图向你解释我到底想要达到什么目的。

每当用户点击通知。在检查我的应用程序是否启动后,我必须选择二选一(​​不包括服务,因为它们总是在后台运行)。1. 如果我的应用程序已经启动,只需启动所需的活动。2.如果应用程序没有启动,那么我必须启动它,然后打开所需的活动。

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

4

3 回答 3

2

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

CommonData.runObject = new Object();

在主要活动中,当应用程序关闭时onCreate,此runObject设置为 null。

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

于 2014-11-23T12:13:29.863 回答
0

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

在任何情况下,您都可以在服务中设置一个静态布尔值设置为 false,然后在您认为应用程序正在运行时根据应用程序的任何状态以及您自己对正在运行的应用程序的定义将其设置为 true 或 false . 您需要覆盖要启用它的状态并将布尔值设置为 true;以及要禁用它的位置,覆盖并设置为false。

在这里查看 Activity 生命周期,因为通常您希望通过 Activity 生命周期来衡量您的应用程序生命周期,因为它对用户来说是最可见的,但是,其他组件也有与此类似的其他生命周期,您也可以使用:

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

于 2012-11-03T19:51:56.333 回答
0

当您的服务在后台工作时,您的应用程序真的在运行!如果您想检查您的应用程序的任何活动是前台还是后台,我认为您可以使用活动的生命周期方法并在Application类中设置布尔值,或者您可以获得列表在您的服务中运行任务并检查您的任何活动是否正在运行:

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;
    }
}

但是看到这个

其他:

检查 Activity 是否从 Service 运行

如何确定我的一项活动是否在前台

发现 android 活动是否正在运行

于 2012-11-03T19:23:03.437 回答