The correct way to determine if service is running

Dim*_*Dim 6 android android-service kotlin

I am running foreground services in my app and I need to deremine if they running in my activity. From my searches I found that this is the option:

private fun isMyServiceRunning(serviceClass: Class<*>): Boolean {
    val manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
    for (service in manager.getRunningServices(Int.MAX_VALUE)) {
        if (serviceClass.name == service.service.className) {
            return true
        }
    }
    return false
}
Run Code Online (Sandbox Code Playgroud)

but:

getRunningServices(Int): is deprecated.

So I am using one of 3 ways.

  1. Binding the service to the activity with onResume. But I think it a bit overkill for something small just to check if service is running.
  2. Make the Intent public and check if its null, but there can be some cases where the intent not null but service not running
  3. Check if the foreground service persistent notification is active, but this is workaround.

What is the most correct way to check if service is running?

小智 9

在服务本身中创建一个静态布尔值。在onCreate中使其为真;在 onDestroy() 中将其设置为 false;

public class ActivityService extends Service {

public static  boolean IS_ACTIVITY_RUNNING = false;

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    IS_ACTIVITY_RUNNING = true;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
            if(!IS_ACTIVITY_RUNNING)
                stopSelf();
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    IS_ACTIVITY_RUNNING = false;
}}
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过 boolean ActivityService.IS_ACTIVITY_RUNNING 检查您的活动是否正在运行