美文网首页
Android判断service是否启动

Android判断service是否启动

作者: _九卿_ | 来源:发表于2018-01-11 11:29 被阅读232次

    在写一款音乐播放器时,发现如果不判断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.RunningServiceInfo> = 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.RunningServiceInfo> = activityManager.getRunningServices(Int.MAX_VALUE)
    

    相关文章

      网友评论

          本文标题:Android判断service是否启动

          本文链接:https://www.haomeiwen.com/subject/iwyznxtx.html