Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查服务是否在Android中运行_Android_Android Service - Fatal编程技术网

检查服务是否在Android中运行

检查服务是否在Android中运行,android,android-service,Android,Android Service,我正在编写一个服务来检查某个特定的服务是否正在运行。我正在使用报警管理器每秒调用checkService.class。(这很好用) 在checkService.class中,我有以下代码: private boolean isMyServiceRunning() { ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); for (RunningService

我正在编写一个服务来检查某个特定的服务是否正在运行。我正在使用报警管理器每秒调用checkService.class。(这很好用)

在checkService.class中,我有以下代码:

private boolean isMyServiceRunning() 
{
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) 
    {
        if (PhoneListnerService.class.getName().equals(service.service.getClassName())) 
        {
            return true;
        }
    }
    return false;
}
当它返回真值时,我什么也不做。如果为false,则启动服务PhoneListnerService.class。这个过程第一次运行的很好,但是如果我使用某个taskKiller应用程序杀死整个应用程序,“isMyserviceRunning”仍然显示true

我相信taskKiller会杀死所有的服务、广播接收器等-如果是这样的话,为什么它会显示True,而不是显示False

有人能帮我吗


谢谢

也许android没有停止服务。杀戮服务有未定义的行为。另一方面,您不必在启动服务之前检查服务是否正在运行。您可以使用该警报来启动服务。如果服务已在运行,则不会调用
onCreate
,而是调用
onstart命令。从alarm启动服务时,您可以在intent中添加一个变量,检查
onstart命令中的变量,并使用一些简单的逻辑来确定要执行的操作。

@devman可能是对的,也可能是错的,但最重要的是您在这里使用alarm manager,因此当您终止服务时,alarmmanager会在一秒钟内重新启动。所以它是返回真的。检查它。

它甚至没有一次返回假的?没有。我正在我的Nexus 5上尝试此功能。如果你将其关闭,则不要期望你的应用程序正常工作。你是说Task Killer没有正确关闭服务吗?@Devman我是说,确保服务成功停止的唯一方法是调用
stopService
stopSelf
。正如我所说,强制停止任务和服务的行为可能不合理,不可信。强制停止只会向进程发送信号,其他一切都由操作系统处理。@TheDevMan:谁知道任务杀手在做什么?任务杀手是邪恶的,违背了安卓系统的设计原则,编写它们的人根本不考虑这些原则。如果要测试完全关闭应用程序,请转到设置->应用程序并使用“强制停止”。至少你会知道是安卓操作系统杀死了你的应用程序,而不是一个任务杀手,它可能会成功,也可能不会成功。@Squonk:我试过强制关闭部分。。经理没有在办公室工作all@TheDevMan当前位置您以错误的方式处理此问题。如果您想测试问题中的代码是否有效,请将测试“停止”按钮放入您的应用程序中,并使用它手动停止
服务
,然后使用日志记录检查它是否正确停止,然后再次启动。您还没有真正解释您的
服务的功能以及为什么需要不断检查其状态,因此很难建议您如何操作。从问题中,报警管理器会在启动服务之前检查服务是否正在运行我记录并检查了10秒钟。这是同样的问题。