我每次启动应用程序或设备重新启动时都会启动服务,但我最近注意到该服务可以一次运行多次,所以每次调用它时,它只是堆积起来,最终电池耗尽变得疯狂。
有谁知道如何检查服务是否已在运行?
以下是启动服务的代码:
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;
}
}
我想只有一个服务实例,因为没有理由拥有多个服务,只是占用电池。
我认为与我在这里添加的服务相关的一切,如果有什么遗失,请通知我。
答案 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的代码更简单