백그라운드 예약 작업 및 경보를 취소하는 일회성 권한
우리는 Android SDK를 개발하고 Android 11 베타를 테스트하는 동안 아직보고되지 않은 문제를 발견했습니다.
Android 11에서는 위치, 마이크 및 카메라 권한에 대한 새로운 일회성 권한이 도입되었습니다. 이 옵션을 사용하면 사용자가 애플리케이션에서 나가는 즉시 권한이 취소됩니다 (자세한 내용은 여기 에서 찾을 수 있음 ).
문제는 앱이 더 이상 포 그라운드에 있지 않을 때 (앱을 종료 할 필요가 없으며 최소화하는 것으로 충분 함) 짧은 시간 후에 앱이 강제 된 것처럼 향후 예약 된 모든 알람 또는 작업이 제거된다는 것입니다. 살해. 이 권한 수준에서만 발생합니다. 다른 수준을 거부하거나 제공하면 예상대로 이전에 예약 된 경보 또는 작업이 유지됩니다. 베타 3 빌드에서 RPB3.200720.005 빌드 번호가있는 Pixel 2 에뮬레이터에서이를 재현했습니다. 이 저장소 에서 버그를 재현하기위한 샘플 앱을 찾을 수 있습니다.
이 단일 활동 앱은 다음 5 분 동안 울릴 알람과 5 ~ 6 분 사이에 트리거 할 작업을 예약합니다. 화면에는 각각 해당 권한 요청을 트리거하는 세 개의 버튼이 있습니다. JobService 및 BroadcastReceiver 클래스는 트리거 된 것만 기록합니다. 다음 단계 후에 상황을 재현 할 수 있습니다.
- 응용 프로그램이 시작될 때마다 모두를 실행할 수
adb shell dumpsys alarm | grep com.example.permissions.app
및adb shell dumpsys jobscheduler | grep com.example.permissions.app
경보 및 작업이 모두 예정되어 있는지, - 버튼 중 하나를 클릭하고 일회성 권한 수준을 부여하십시오.
- 앱 최소화 (홈 화면으로 이동하거나 다른 앱을 열 수 있음)
- 약 1 분 후
adb shell dumpsys alarm | grep com.example.permissions.app
및adb shell dumpsys jobscheduler | grep com.example.permissions.app
. 알람과 작업이 더 이상 나타나지 않습니다. - 작업 및 알람 모두에 대해 원래 예약 된 시간을 기다리면 (시스템 지연에 대한 여유가 있음) 트리거되지 않음을 표시합니다.
비슷한 상황에 처한 사람이 있습니까? 우리의 직감은 일회성 권한을 취소하기 위해 앱 프로세스가 어떤 식 으로든 종료되어 이러한 부작용을 유발한다는 것입니다. 또한 Android Issue Tracker 에 문제를 제출했으며 Google에서 답변하는 경우이 게시물을 계속 업데이트하겠습니다.
답변
문제는 '해결'되었습니다. 문제는 실제로 앱을 닫은 후 권한이 취소 될 때 강제 종료를 호출하는 Android Studio에서 발생했습니다.
실제 Google의 응답 :
이 문제를 제기하고 재현 할 수있는 샘플 코드를 제공해 주셔서 대단히 감사합니다. 자세히 조사한 결과 Android 스튜디오와 '실행'명령을 통해 시작된 앱 간의 상호 작용 때문이라는 것을 발견했습니다.
특히 Android가 앱의 권한을 취소하면 해당 앱의 프로세스가 종료됩니다. Android Studio가 실행 한 앱이 더 이상 실행되지 않는 것을 확인하면 adb를 통해 강제 종료 명령을 보내는 것으로 나타났습니다.
런처를 통해 앱이 시작되면 (Android Studio에 연결된 에뮬레이터 포함) 앱이 강제 중지되지 않고 알람과 작업이 모두 예상대로 실행됩니다.
따라서 개발 단계를 제외하고는 추가 문제가 발생하지 않습니다. 자세한 내용은 질문에 링크 된 Android 문제 추적기를 확인하세요.