티스토리 뷰

반응형



Android O 백그라운드 실행 제한 예외 항목


백그라운드에서 실행될 때마다 앱은 기기의 제한된 리소스(예: RAM)를 사용합니다. 이 경우 사용자 환경이 손상될 수 있으며, 게임 재생이나 동영상 보기 등 리소스를 많이 소모하는 앱을 사용 중인 경우에는 특히 그렇습니다.

Android 8.0 (API level 26)는 사용자 경험을 개선하기 위해 백그라운드에서 실행되면서 앱의 동작을 제한합니다.

백그라운드 실행 제한 예외 항목에 대해서 알아보겠습니다.


ACTION_LOCKED_BOOT_COMPLETED, ACTION_BOOT_COMPLETED

첫 부팅 시 한번 Broadcast 보내집니다. 많은 앱에서 Broadcast receive 하기 위하여 설정하고 있습니다. 예를 들면 알람 같은 앱이 있습니다.


ACTION_USER_INITIALIZE, "android.intent.action.USER_ADDED", "android.intent.action.USER_REMOVED"

Broadcast 는 권한을 통하여 보호하고 있습니다. 그리고 많은 일반 앱들이 receive을 할 수 없습니다.


"android.intent.action.TIME_SET", ACTION_TIMEZONE_CHANGED, ACTION_NEXT_ALARM_CLOCK_CHANGED

시계 앱에서는 해당 Broadcasts 을 receive하고 있습니다. Receive 하는 시점은 time, timezone, or alarms 의 변화가 있을 때 입니다.


ACTION_LOCALE_CHANGED

지역이 변경 있을 때 발생하며 자주 발생하지 않습니다. 앱은 위치 변경 있을 때마다 정보를 업데이트 해야할 것입니다.


ACTION_USB_ACCESSORY_ATTACHED, ACTION_USB_ACCESSORY_DETACHED, ACTION_USB_DEVICE_ATTACHED, ACTION_USB_DEVICE_DETACHED

USB 이벤트에 대해서 알아야한다면 위의 Broadcast 이 최선입니다.


ACTION_CONNECTION_STATE_CHANGED, ACTION_CONNECTION_STATE_CHANGED, ACTION_ACL_CONNECTED, ACTION_ACL_DISCONNECTED

이러한 Broadcast 는 Bluetooth events 에 처리에 대해서 어렵지 않게 사용할 수 있게 됩니다.


ACTION_CARRIER_CONFIG_CHANGED, TelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED, "TelephonyIntents.SECRET_CODE_ACTION", ACTION_PHONE_STATE_CHANGED, ACTION_PHONE_ACCOUNT_REGISTERED, ACTION_PHONE_ACCOUNT_UNREGISTERED

OEM telephony apps 들은 위의 Broadcast가 필요할 것입니다.


LOGIN_ACCOUNTS_CHANGED_ACTION

일부 앱은 계정 로그인에 대한 변화를 알아야만 변경된 계정에 대한 예약된 스케줄 처리를 설정할 수 있습니다.


ACTION_PACKAGE_DATA_CLEARED

사용자가 설정에서 데이터를 명확히 지울 때만 전송되며, Broadcast는 사용자 경험에 큰 영향을 미치지 않을 것입니다.


ACTION_PACKAGE_FULLY_REMOVED

일부 앱들은 다른 package가 제거되면 저장소 데이터를 업데이트해야 할 수 있습니다. 이러한 앱들에 대해서 위 Broadcast 말고는 좋은 대안이 없습니다. Note: 기타 패키지 관련 Broadcasts (ACTION_PACKAGE_REPLACED )은 면제 대상에 포함되어 있지 않습니다. 이러한 Broadcast는 일반적으로 충분히 면제되어 성능에 영향을 줄 수 있습니다.


ACTION_NEW_OUTGOING_CALL

앱에서 이 Broadcast 수신을 통하여 전화 왔는지 확인 할 수 있습니다.


ACTION_DEVICE_OWNER_CHANGED

이러한 Broadcast는 자주 보내지 않습니다; 일부 앱은 디바이스의 보안 상태가 변경되었는지 알도록 수신해야할 필요가 있습니다.


ACTION_EVENT_REMINDER

캘린더 프로바이더가 일정 알림에 일정 알림을 게시하도록 보내야합니다. 캘린더 프로바이더는 어떤 캘린더 앱이 무엇인지 모르기 때문에 이 Broadcast 암시적이어야 합니다.


ACTION_MEDIA_MOUNTED, ACTION_MEDIA_CHECKING, ACTION_MEDIA_UNMOUNTED, ACTION_MEDIA_EJECT, ACTION_MEDIA_UNMOUNTABLE, ACTION_MEDIA_REMOVED, ACTION_MEDIA_BAD_REMOVAL

이러한 Broadcast는 사용자와 장치의 물리적 상호 작용 (저장소 볼륨 설치 또는 제거) 또는 부팅 초기화의 일부로 사용 가능한 볼륨이 마운트 될 때 전송됩니다. 그래서 Broadcast 수신은 흔히 발생하는 것이 아니며 일반적으로 사용자의 통제하에 있습니다.


SMS_RECEIVED_ACTION, WAP_PUSH_RECEIVED_ACTION

이러한 Broadcasts 은 SMS 수신 apps에 의존하고 있습니다.


PHONE_STATE 예시

<receiver android:name="kr.co.dev.faithpeople.service.IncomingCallBroadcastReceiver">
   <intent-filter>
       <action android:name="android.intent.action.PHONE_STATE" />
   </intent-filter>
</receiver>


정리

Google Developer 에서 알려주는 Android O 백그라운드 실행 제한 예외 항목을 바탕으로 작성하였습니다. 오역이 있을 수 있으니 참고해주세요. 원문 내용은 Google Developer의 Implicit Broadcast Exceptions 에서 확인할 수 있습니다.

반응형
댓글