PendingIntent
PendingIntent란 대기 중인 인텐트라는 뜻으로, 현재 어플리케이션이 살아있는지와 관계없이 특정 시점에 Intent를 수행할 수 있게 해주는 것이다.
다른 어플리케이션을 통해 Intent를 실행할 수 있도록 PendingIntent를 전달할 수 있다.
예시
- Notification
- NotificationManager에게 PendingIntent 전달
- Widget
- RemoteView에 ClickListener로 PendingIntent를 설정
- AppWidgetManager가 PendingIntent를 실행
- 특정 시점에 실행
- AlarmManager에게 PendingIntent 전달
Android 12 부터는 PendingIntent를 만들 때 변경 가능 여부를 지정해야한다.
PendingIntent.FLAG_MUTABLE
PendingIntent.FLAG_IMMUTABLE
PendingIntent는 변경될 수 있는데, 악성 앱이 PendingIntent를 수정하여, 우리 앱의 다른 컴포넌트에 접근할 수도 있다.
Foreground Service
백그라운드에서 포그라운드 서비스를 시작할 수 없다.
앱이 백그라운드 상태에 있는 동안 포그라운드 서비스를 시작하려고 하면 ForegroundServiceStartNotAllowedException
이 발생한다.
WorkManager를 사용해야한다.
백그라운드에서 포그라운드 서비스 실행이 허용되는 경우
백그라운드에서 포그라운드 서비스 실행이 허용되는 경우
다음 상황에서는 앱이 백그라운드에서 실행되는 동안에도 포그라운드 서비스를 시작할 수 있습니다.
- 앱이 활동과 같은 사용자에게 표시되는 상태에서 전환됩니다.
- 앱은 백그라운드에서 활동을 시작할 수 있습니다. 단, 앱이 기존 작업의 백 스택에 활동을 보유한 경우는 예외입니다.
- 앱이 Firebase 클라우드 메시징을 사용하여 우선순위가 높은 메시지를 수신합니다.
- 기기가 재부팅되고 broadcast receiver에서
ACTION_BOOT_COMPLETED
나ACTION_LOCKED_BOOT_COMPLETED
,ACTION_MY_PACKAGE_REPLACED
인텐트 작업을 수신한 후의 경우입니다.
- 앱이 broadcast receiver에서
ACTION_TIMEZONE_CHANGED
나ACTION_TIME_CHANGED
,ACTION_LOCALE_CHANGED
인텐트 작업을 수신합니다.
- 앱이
BLUETOOTH_CONNECT
나BLUETOOTH_SCAN
권한이 필요한 블루투스 브로드캐스트를 수신합니다.
- 앱에서 호환 기기 관리도구를 사용합니다.
호환 기기가 근처에 있을 때마다 시스템이 앱의 절전 모드를 해제하도록 하려면 Android 12에서 호환 기기 서비스를 구현합니다.
- 시스템에서 '고정' 포그라운드 서비스를 다시 시작합니다. 포그라운드 서비스를 고정하려면
onStartCommand()
에서START_STICKY
나START_REDELIVER_INTENT
를 반환합니다.
- 사용자가 앱의 배터리 최적화를 사용 중지합니다. 시스템 설정에서 앱의 앱 정보 페이지로 사용자를 보내 사용자가 이 옵션을 찾도록 할 수 있습니
포그라운드 서비스 실행 제한 | Android 12 | Android Developers
Uploaded by N2T
'Programming > 플랫폼' 카테고리의 다른 글
[Android] 웹 뷰 - 앱 간 통신 (2) | 2023.11.09 |
---|---|
Web on Android - 안드로이드에서 웹 컨텐츠를 사용하는 방식 (0) | 2023.09.02 |
[Andriod] Webview 안에서 Push Notification으로 페이지 로드하기 (0) | 2023.03.06 |
[Android] 웹 뷰 로딩 오류 (0) | 2023.03.04 |
[Android] ASyncTask Scope (0) | 2023.03.04 |