본문 바로가기
Issue Solutions/Android&Kotlin

[Android] Activity resumed, paused가 무한 반복되는 현상

by 신숭이 2022. 5. 25.

 

오류 : Activity resume, pause 가 무한 반복되는 현상

 

 

 

관련 로그 

V/FA: Activity resumed, time: 8562145
V/FA: Screen exposed for less than 1000 ms. Event not sent. time: 32
V/FA: Activity paused, time: 8562177

위와 같은 로그가 무한 반복되고, 아무런 Exception도 안뜨는 상황이고 화면은 멈춘 상태였다.

App keeps pausing and resuming, in an endless loop, but doesn't throw an exception

 

 

발생 시점

 

타겟 버전 S인 앱을 안드로이드 11 기종으로 빌드 테스트 수행 시 발생

 

 

 

 

발생 원인

 

Permission 요청 로직에서 문제가 발생했다.

앱이 Permission 요청 -> 요청에 사용자가 응답 -> Permission 확인 안됨 -> 앱이 다시 Permission 요청
(그러나 화면에는 안뜸, 사용자는 이미 Permission 요청에 응했기 때문)

 

 

 

 

해결 방법

 

왜 Permission이 확인이 안되었을까.

 

이유는 블루투스 요구 권한의 종류가 달라졌기 때문이다. 안드로이드 12는 SCAN과 CONNECT 권한이 필요해서 해당 권한을 부여받았는지 물어보는 로직을 설계한 상태였다.

 

그러나 안드로이드 11 상태의 기종에서 위와 같은 로직은 무한루프에 빠지게 하는 원인이 된다. 해당 권한은 11에서 확인할 수 없기에 12와 11은 권한을 물어보는 조건을 다르게 구성해야 했다.

 

 

기존 로직은 아래와 같이 안드로이드 버전에 관계없이 권한을 체크했다. (안드로이드 12만 작동하는 코드)

    if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
        checkSelfPermission(Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED ||
        checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED ||
        checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        requestBlePermissions()
        return
    }

 

아래와 같이 수정해서 해결했다. (안드로이드 12 이하의 모든 버전에서 작동하는 코드)

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
            checkSelfPermission(Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED ||
            checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED ||
            checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            requestBlePermissions()
            return
        }
    }
    else {
        if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
            checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            requestBlePermissions()
            return
        }
    }

 

결론 : 안드로이드 정책에 따른 권한 요구사항 변경은 반드시 안드로이드 버전 업데이트 시, 기종별로 반드시 체크해봐야한다. 

 

 

관련포스트

https://full-stack.tistory.com/27?category=911056 

 

[Android] 권한(Permission) # 1 - 시스템 권한 (feat. Bluetooth)

[Android] 권한(Permission) # 1 - 시스템 권한 (feat. Bluetooth) 작성 시점 : 22.05.15 안드로이드 개발을 하다 보면, 특정 기능을 사용할 때 권한(Permission)이 필요한 경우가 있다. 특히 안드로이드 12 (API..

full-stack.tistory.com

 

 

 

끝.

'Issue Solutions > Android&Kotlin' 카테고리의 다른 글

[Android] INSTALL_PARSE_FAILED_MANIFEST_MALFORMED  (0) 2022.04.29

댓글