-
getRunningServices is deprecated카테고리 없음 2023. 7. 3. 15:33
Android의 getRunningServices() 메서드는 Android API 레벨 26 (Android 8.0)에서부터 사용이 비권장(Deprecated)되었습니다.
더 이상 사용되지 않는 이유는 보안과 성능 문제 때문입니다.
Deprecated된 getRunningServices() 메서드 대신, 다음과 같은 대안을 사용할 수 있습니다.
- ActivityManager.getRunningAppProcesses(): 현재 실행 중인 애플리케이션 프로세스 목록을 가져옵니다. 각 프로세스는 애플리케이션의 패키지 이름과 프로세스 정보를 포함하고 있습니다. 이 메서드는 현재 실행 중인 서비스를 확인하는 데 사용될 수 있습니다.
- ActivityManager.getRunningTasks(): 이 메서드는 사용자가 현재 활성화된 작업의 목록을 가져옵니다. 각 작업은 작업의 정보와 관련된 최근 사용된 액티비티의 목록을 포함하고 있습니다. 작업의 상태를 분석하여 실행 중인 서비스를 확인할 수 있습니다. 그러나 이 메서드는 Android API 레벨 21 (Android 5.0)부터 비권장(Deprecated)되었습니다.
- ActivityManager.RunningServiceInfo: ActivityManager 클래스의 getRunningServices() 메서드를 대체하기 위해 RunningServiceInfo 클래스를 사용할 수도 있습니다. RunningServiceInfo는 실행 중인 서비스에 대한 정보를 제공합니다. ActivityManager.RunningAppProcessInfo와 유사하게 이 클래스를 사용하여 실행 중인 서비스 목록을 확인할 수 있습니다.
위의 대안들 중에서 가장 권장되는 방법은 ActivityManager.getRunningAppProcesses()를 사용하는 것입니다. 그러나 getRunningTasks()는 Android API 레벨 21에서부터 비권장(Deprecated)되었으므로 최신 버전의 안드로이드에서는 사용을 피하는 것이 좋습니다.
앱이 현재 실행중인지(최상단) 확인하는 함수
fun Context.getForegroundState(pkgName: String): Boolean { val am = this.getSystemService(ACTIVITY_SERVICE) as ActivityManager return am.runningAppProcesses.any { it.processName == pkgName && it.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND } }