检查已启动的服务是否已在运行

时间:2017-12-31 15:50:43

标签: c# android xamarin service

我每次启动应用程序或设备重新启动时都会启动服务,但我最近注意到该服务可以一次运行多次,所以每次调用它时,它只是堆积起来,最终电池耗尽变得疯狂。

有谁知道如何检查服务是否已在运行?

以下是启动服务的代码:

loghelper

它位于 OnCreate 函数的 MainActivity 类中,在函数内的所有其他代码完成后调用。

服务类如下:

intent = new Intent(Application.Context, typeof(NotificationService));
Application.Context.StartService(intent);

Inside是我每隔X次运行的一个任务:

[Service (Label = "ITMNotificationService")]
class NotificationService : Service
{
    ...

    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
    {
        base.OnStartCommand(intent, flags, startId);

        ...

        UpdateNotification();

        return StartCommandResult.Sticky;
    }

    public override IBinder OnBind(Intent intent)
    {
        // This is a started service, not a bound service, so we just return null.
        return null;
    }
}

我想只有一个服务实例,因为没有理由拥有多个服务,只是占用电池。

我认为与我在这里添加的服务相关的一切,如果有什么遗失,请通知我。

2 个答案:

答案 0 :(得分:1)

如果多次启动,您的服务只会有一个实例 - 多次调用startService()

您将为每个startService()调用获得相应的onStartCommand回调,但它将位于同一个实例上,Android不会创建同一服务组件的多个实例。

class NotificationService : Service
{
    ...
    boolean isStarted = false;
    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
    {
        base.OnStartCommand(intent, flags, startId);

        ...

        if (!isStarted) {
            isStarted = true;
            UpdateNotification();
        }

        return StartCommandResult.Sticky;
    }

public override IBinder OnBind(Intent intent)
{
    // This is a started service, not a bound service, so we just return null.
    return null;
}

}

答案 1 :(得分:0)

感谢@elmorabea,我在服务类中添加了public static bool isStarted;,这样就可以检查服务是否已启动。

原来比试图找到一些我正在搜索的基于android的代码更简单