강제 중지 상태 앱은 사용자가 직접 실행하거나 위젯/쉐어시트 등으로 간접 실행할 때까지 계속 중지됨
이를 위해 종료 시점에 모든 PendingIntent도 취소됨. 위젯이 비활성화되고, 다시 실행해야 복구됨
ApplicationStartInfo.wasForceStopped()로 강제 중지에서 복귀 여부 확인 가능
Android 15부터 16 KB 페이지 크기를 지원하는 디바이스 등장
네이티브 코드(NDK)를 사용하는 앱은 반드시 재빌드 필요하며, EMULATOR 테스트를 권장
Private space는 별도 사용자 프로필로 격리됨
Medical 앱/런처/앱마켓은 Private space에서 정상 동작하도록 추가 설정 필요
화면 공유 중에는 민감한 알림·활동이 자동으로 리다액션됨.
개발자는 알림에 setPublicVersion()을 사용하거나 setContentSensitivity()로 표시할 수 있음
Android 15부터 예측 백 제스처를 옵트인한 앱에서만 예측 백 애니메이션 작동
이에 맞춰 프래그먼트 전환과 Navigation 구성을 업데이트해야 함
화면 공유·캐스트·녹화 중 상단 상태바에 칩 표시되고, 탭 시 즉시 중단 가능
화면 잠금 시에도 자동으로 화면 공유 중단됨
유효한 프로세스 수명 주기 외 네트워크 요청은 예외(IOException) 발생
네트워크는 lifecycle-aware나 WorkManager/포그라운드 서비스 이용 권장
제한 시간: dataSync 혹은 mediaProcessing 타입의 포그라운드 서비스는 24시간 중 최대 6시간 실행 가능.
타임아웃 발생 시: 시스템이 Service.onTimeout(int, int) 콜백 호출 → 앱은 수초 내에 stopSelf() 해야 하며, 지연 시 예외 발생(RemoteServiceException)
공유 제한: 같은 앱 내 다수 서비스 사용 시 총합 6시간이 카운트. 단, 앱이 포그라운드로 전환되면 타이머 리셋
테스트: adb shell am compat enable FGS_INTRODUCE_TIME_LIMITS your-package-name 로 타이머 적용 가능
인덱스, 플래그, 폭, 정밀도 등을 더 엄격하게 검증합니다. 예: %0 사용 시 IllegalFormatArgumentIndexException 발생
자바 List에 동일 이름의 API가 추가되면서, Kotlin 확장 함수 호출 시 버전 호환 문제가 생길 수 있음. 권장 해결법: removeAt(0) / removeAt(lastIndex) 사용
캘리그래피나 복잡 조합 언어 시, 글자 일부가 잘리는 현상 방지돼 TextView가 자동으로 너비 분배를 늘립니다
앱이 포그라운드에 있어야 하거나, 포그라운드 서비스 중이어야 오디오 포커스를 요청할 수 있습니다. 그렇지 않으면 AUDIOFOCUS_REQUEST_FAILED 반환
| 서비스 타입 | 설명 | 24시간 타임아웃 적용 여부 |
|---|---|---|
dataSync | 데이터 동기화, 백업 등 | ✅ 최대 6시간 (onTimeout 필요) |
mediaProcessing | 영상/음성 변환, 인코딩 등 | ✅ 최대 6시간 (onTimeout 필요) |
camera | 백그라운드 카메라 사용 | ❌ 없음 |
mediaPlayback | 음악/비디오 재생 | ❌ 없음 |
mediaProjection | 화면 녹화/공유 | ❌ 없음 |
microphone | 백그라운드 음성 녹음 | ❌ 없음 |
phoneCall | 전화 기능 관련 | ❌ 없음 |
connectedDevice | 웨어러블, BLE 등 외부기기 연결 | ❌ 없음 |
health | 헬스 데이터 수집 | ❌ 없음 |
location | 위치 추적 서비스 | ❌ 없음 |
remoteMessaging | 푸시 메시징 서비스 등 | ❌ 없음 |
shortService | 짧은 시간 내 종료 예상 서비스 | ❌ 없음 |
specialUse | OS에서 특별 허용된 서비스 | ❌ 없음 |
systemExempted | 시스템이 예외로 허용한 서비스 | ❌ 없음 |
참조: https://developer.android.com/about/versions/15/behavior-changes-all
참조: https://developer.android.com/about/versions/15/behavior-changes-15
참조: https://developer.android.com/about/versions/15/changes/foreground-service-types