다음을 통해 공유


iOS의 Backgrounding 소개

iOS는 백그라운드 처리를 매우 엄격하게 규제하고 이를 구현하는 세 가지 방법을 제공합니다.

  • 백그라운드 작업 등록 - 애플리케이션이 중요한 작업을 완료해야 하는 경우 애플리케이션이 백그라운드로 이동할 때 iOS에 작업을 중단하지 않도록 요청할 수 있습니다. 예를 들어 애플리케이션은 사용자에 대한 로깅을 완료하거나 큰 파일 다운로드를 완료해야 할 수 있습니다.
  • 백그라운드 필수 애플리케이션으로 등록 - 앱은 오디오, VoIP , 외부 액세서리 , 뉴스 스탠드 및 위치와 같은 알려진 특정 배경 요구 사항이 있는 특정 유형의 애플리케이션으로 등록할 수 있습니다. 이러한 애플리케이션은 등록된 애플리케이션 유형의 매개 변수 내에 있는 작업을 수행하는 한 연속 백그라운드 처리 권한이 허용됩니다.
  • 백그라운드 업데이트 사용 - 애플리케이션은 지역 모니터링을 사용하거나 중요한 위치 변경을 수신 대기하여 백그라운드 업데이트를 트리거할 수 있습니다. iOS 7을 기준으로 애플리케이션은 백그라운드 페치 또는 원격 알림을 사용하여 백그라운드에서 콘텐츠를 업데이트하도록 등록할 수도 있습니다.

애플리케이션 상태 및 애플리케이션 대리자 메서드

iOS에서 백그라운드 처리를 위한 코드를 살펴보기 전에 백그라운드 작업이 iOS 애플리케이션의 수명 주기에 미치는 영향을 이해해야 합니다.

iOS 애플리케이션 수명 주기는 애플리케이션 상태 및 이들 간에 이동하기 위한 메서드의 컬렉션입니다. 애플리케이션은 사용자의 동작과 애플리케이션의 백그라운드 요구 사항에 따라 상태 간에 전환됩니다. 이동은 다음 다이어그램에서 설명합니다.

Application States and Application Delegate Methods diagram

  • 실행 중이 아님 - 디바이스에서 애플리케이션이 아직 시작되지 않았습니다.
  • 실행 중/활성 - 애플리케이션이 화면에 표시되고 포그라운드에서 코드를 실행하고 있습니다.
  • 비활 성 - 수신 전화, 문자 또는 기타 중단으로 인해 애플리케이션이 중단됩니다.
  • 백그라운드 - 애플리케이션이 백그라운드로 이동하고 백그라운드 코드를 계속 실행합니다.
  • 일시 중단됨 - 애플리케이션에 백그라운드에서 실행할 코드가 없거나 모든 코드가 완료된 경우 OS에 의해 앱이 일시 중단됩니다. 일시 중단된 애플리케이션의 프로세스는 활성 상태로 유지되지만 애플리케이션은 이 상태에서 코드를 실행할 수 없습니다.
  • 실행 안 됨/종료(드문 경우)로 돌아가기 - 경우에 따라 애플리케이션의 프로세스가 제거되고 애플리케이션이 실행되지 않음 상태로 돌아갑니다. 이는 메모리 부족 상황에서 발생하거나 사용자가 애플리케이션을 수동으로 종료하는 경우에 발생합니다.

멀티태스킹 지원이 도입된 이후 iOS는 유휴 애플리케이션을 종료하는 경우가 거의 없으며, 대신 해당 프로세스를 메모리에 일시 중단된 상태로 유지합니다. 애플리케이션의 프로세스를 활성 상태로 유지하면 다음에 사용자가 애플리케이션을 열 때 애플리케이션이 빠르게 시작됩니다. 또한 애플리케이션이 시스템 리소스를 그리지 않고 일시 중단된 상태에서 백그라운드 상태로 자유롭게 이동할 수 있습니다. iOS 7은 디바이스가 절전 모드로 들어갈 때 애플리케이션이 백그라운드 작업을 일시 중지하고, 사용자 조작 없이 백그라운드에서 직접 콘텐츠를 업데이트할 수 있도록 하는 새로운 API를 사용하여 이 기능을 활용합니다. iOS 백그라운드 기술에서 새로운 API를 다룹니다.

애플리케이션 수명 주기 메서드

앱이 상태를 변경하면 iOS는 클래스의 이벤트 메서드를 통해 애플리케이션에 AppDelegate 알합니다.

  • OnActivated - 애플리케이션이 처음 시작되고 앱이 포그라운드로 돌아올 때마다 호출됩니다. 앱을 열 때마다 실행해야 하는 코드를 배치하는 위치입니다.
  • OnResignActivation - 사용자가 문자 또는 전화 통화와 같은 중단을 수신하면 이 메서드가 호출되고 앱이 일시적으로 비활성화됩니다. 사용자가 전화 통화를 수락하면 앱이 백그라운드로 전송됩니다.
  • DidEnterBackground - 앱이 백그라운드 상태가 되면 호출되며, 이 메서드는 애플리케이션에 가능한 종료를 준비하기 위해 약 5초 동안 제공합니다. 이 시간을 사용하여 사용자 데이터 및 작업을 저장하고 화면에서 중요한 정보를 제거합니다.
  • WillEnterForeground - 사용자가 백그라운드 또는 일시 중단된 애플리케이션으로 돌아와 포그라운드 WillEnterForeground 로 시작하면 호출됩니다. 이때는 동안 저장된 DidEnterBackground 상태를 리하드레이션하여 포그라운드를 사용하도록 앱을 준비해야 합니다. OnActivated 는 이 메서드가 완료된 직후에 호출됩니다.
  • WillTerminate - 애플리케이션이 종료되고 해당 프로세스가 제거됩니다. 이 메서드는 디바이스 또는 OS 버전에서 멀티태스킹을 사용할 수 없거나 메모리가 부족하거나 사용자가 백그라운드 애플리케이션을 수동으로 종료하는 경우에만 호출됩니다. 종료되는 일시 중단된 애플리케이션은 호출 WillTerminate 되지 않습니다.

다음 다이어그램에서는 애플리케이션 상태와 수명 주기 메서드가 어떻게 함께 맞는지 보여 줍니다.

This diagram illustrates how the application states and lifecycle methods fit together

iOS에서 백그라운드 작업에 대한 사용자 컨트롤

iOS 7에는 사용자에게 애플리케이션의 백그라운드 상태를 더 자세히 제어할 수 있는 몇 가지 기능이 도입되었습니다. 앱 전환기와 백그라운드 앱 새로 고침 설정은 모두 애플리케이션 수명 주기에 영향을 미칩니다.

앱 전환기

앱 전환기는 iOS 7에 도입된 중요한 제어 기능입니다. 홈 단추를 두 번 탭하여 시작하고 프로세스가 활성 상태인 애플리케이션을 표시합니다.

Moving between apps using the App Switcher

앱 전환기를 사용하여 사용자는 백그라운드 및 일시 중단된 모든 애플리케이션의 스냅샷 스크롤할 수 있습니다. 애플리케이션을 탭하면 포그라운드로 시작됩니다. 위로 살짝 밀면 백그라운드에서 애플리케이션이 제거되며 해당 프로세스가 종료됩니다. 다음 섹션에서는 iOS 애플리케이션 수명 주기 데모에서 앱 전환기를 자세히 살펴보겠습니다.

Important

앱 전환기는 백그라운드 애플리케이션과 일시 중단된 애플리케이션 간의 차이를 표시하지 않습니다.

백그라운드 앱 새로 고침 설정

iOS 7은 사용자가 백그라운드 처리를 위해 등록된 애플리케이션에 대한 백그라운드 작업을 옵트아웃할 수 있도록 하여 애플리케이션 수명 주기에 대한 사용자 제어를 향상합니다. 이렇게 하면 애플리케이션이 백그라운드 작업을 실행할 수 없습니다.

사용자는 설정 일반 > 백그라운드 앱 새로 고침으로 이동하고 > 선택한 애플리케이션에 대한 백그라운드 권한을 편집하여 이 설정을 변경할 수 있습니다. 백그라운드 앱 새로 고침이 해제된 경우 애플리케이션은 백그라운드를 입력할 때 즉시 일시 중단되고 백그라운드 처리를 수행할 수 없습니다.

Background App Refresh Settings

개발자는 API를 사용하여 백그라운드 새로 고침 애플리케이션 상태 검사 BackgroundRefreshStatus 수 있습니다. 예를 들어 배경 새로 고침 설정 확인 레시피를 참조하세요.

iOS 애플리케이션 수명 주기의 기본 사항과 애플리케이션 수명 주기를 제어하는 기능에 대해 설명했습니다. 다음으로, 작동 중인 iOS 애플리케이션 수명 주기를 살펴보겠습니다.