Android判断service是否启动

在写一款音乐播放器时,发现如果不判断service是否启动,每次进入本地歌曲的界面时,由于重新加载就会造成重复startService的现象,后台播放的歌曲就会停止,所以我们需要先判断如果service已经启动,那么便不启动服务。
查资料后发现android中已经封装了一个获取正在运行的activity和service的类:ActivityManager

var activityManager: ActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager

通过以下代码可以判断服务是否启动

fun isServiceRunning(context: Context, className: String): Boolean{
        if(className.isNullOrEmpty()){
            return false
        }
        var isRunning: Boolean = false
        var activityManager: ActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        var serviceList: List = activityManager.getRunningServices(30)
        if(serviceList.isEmpty()){
            return false
        }
        serviceList.forEach { item ->
            if(item.service.className == className){
                isRunning = true
                return@forEach
            }
        }
        return isRunning
    }

简单调用:

isServiceRunning(context, Service::class.java.name)

这个方法思路就是通过ActivityManager获得后台正在运行的服务,再遍历匹配服务名称,来判断该服务是否在后台运行。

注意:这里有个坑,就是getRunningServices(30)//这里的值小了会漏掉该service而返回false,如果不想漏掉,可以设置值大些

var serviceList: List = activityManager.getRunningServices(Int.MAX_VALUE)

你可能感兴趣的:(Android判断service是否启动)