Android:如何在AlarmManager启动服务时知道服务是否正在运行

时间:2012-12-10 14:01:53

标签: android alarmmanager

我需要在后台运行一个服务,而它一直被Android杀死我需要一次又一次地启动它。由于一些编程目的,我需要知道服务是否正在运行。那是因为我会同时启动第二个服务,并且它会继续启动两次。

到目前为止我已经尝试过了:

private boolean isServiceRunning() {
    ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager
            .getRunningServices(Integer.MAX_VALUE)) {
        if (NotificationService.class.getName().equals(
                service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

但正如我所读到的那样,只有当我的服务以

开始时才有可能
startService(Intent);

因为我每隔2分钟用AlarmManager启动我的服务,例如我不知道如何检查服务是否正在运行。也许如果你有一个想法,我怎么能避免服务启动方法两次以上,我会很满意。

1 个答案:

答案 0 :(得分:0)

在服务方面         首次创建服务时会调用onCreate()方法。 你可以在其中做所有声明。

onStartCommand() 
当你尝试通过报警管理器调用它时,会一次又一次地调用

如果您希望服务不被杀死,那么您可以在不同的进程上运行该服务。为此您需要进程间通信(IPC)。

为此,您可以在清单文件中声明服务,如下所示:

<service
    android:name="myservice"
    android:process=":my_process">
<service>
在android:process行中的冒号(:) my_process告诉android系统进程的名称是my_process,并且:告诉它是声明它的应用程序的私有。

参考:complete tutorial on services