首页 > 解决方案 > 前台服务中的静态变量

问题描述

我的问题很简单。我有一个前台服务,当它被激活时,它会无限期地运行,直到用户停止它。在我的 MainActivity 中,我需要知道服务是否正在运行(如果用户关闭应用程序但前台服务仍在运行,当他重新进入应用程序时,我需要知道服务是否已经在运行)。Service在带有状态变量的伴随对象上是否可行,以便我可以访问它的状态?像这样的东西:

@AndroidEntryPoint
class SomeForegroundService: Service() {

    companion object {
        var status = 0
    }
....

然后在我的某个地方MainActivity...

SomeForegroundService.status == 1

这容易发生内存泄漏吗?有什么更好的解决方案(不包括检查每个正在运行的系统服务)

标签: androidkotlin

解决方案


您可以使用此方法检查服务是否正在运行,而不是静态变量

// check and return true if service is running
private boolean isMyServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (TrackingService.class.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

编辑:
如果您不想检查每个服务,您可以在服务中注册广播接收器并 ping 活动。
原始答案:如何检查服务是否在 Android 上运行?(本 H 的回答)


推荐阅读