如何检查是否已启动IntentService

时间:2011-08-15 00:49:40

标签: android intentservice

我想知道某个活动是否已成功启动IntentService

由于可以通过IntentService绑定bindService()以使其保持运行,因此可能需要检查调用startService(intent)是否会调用onStartCommand(..)或服务对象中的onHandleIntent(..)

但是如何在活动中检查?

4 个答案:

答案 0 :(得分:7)

这是我用来检查我的服务是否正在运行的方法。 Service类是DroidUptimeService。

private boolean isServiceRunning() {
    ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(Integer.MAX_VALUE);

    if (serviceList.size() <= 0) {
        return false;
    }
    for (int i = 0; i < serviceList.size(); i++) {
        RunningServiceInfo serviceInfo = serviceList.get(i);
        ComponentName serviceName = serviceInfo.service;
        if (serviceName.getClassName().equals(DroidUptimeService.class.getName())) {
            return true;
        }
    }

    return false;
}

答案 1 :(得分:5)

您可以在构建PendingIntent时添加标记,如果返回的值为null,则表示您的服务未启动。提到的标志是PendingIntent.FLAG_NO_CREATE

Intent intent = new Intent(yourContext,YourService.class);
PendingIntent pendingIntent =   PendingIntent.getService(yourContext,0,intent,PendingIntent.FLAG_NO_CREATE);

if (pendingIntent == null){
    return "service is not created yet";
} else {
    return "service is already running!";
}

答案 2 :(得分:2)

  

我想知道一个Activity是否成功启动了IntentService。

如果您在致电startService()时未在活动或服务中收到异常,则IntentService已启动。

  

因为可以通过bindService()绑定IntentService以使其保持运行

为什么?

答案 3 :(得分:0)

以下是我用来检查我的服务是否正在运行的方法:

  public static boolean isMyServiceRunning(Class<?> serviceClass, Context context) {
        ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
            if (serviceClass.getName().equals(service.service.getClassName())) {
                return service.started;
            }
        }
        return false;
    }