광고 닫기

iOS에서 멀티태스킹이 어떻게 작동하는지 모르는 사람들이 아직도 많습니다. 그러나 우선 이것이 실제 멀티태스킹이 아니라 시스템이나 사용자에게 부담을 주지 않는 매우 스마트한 솔루션이라는 점을 지적할 필요가 있다.

iOS에서 백그라운드로 실행 중인 앱이 운영 메모리를 가득 채우면 시스템 속도가 느려지고 배터리 수명이 길어지므로 사용자가 수동으로 꺼야 한다는 미신을 종종 들을 수 있습니다. 멀티태스킹 표시줄에는 실제로 실행 중인 모든 백그라운드 프로세스 목록이 포함되지 않고 가장 최근에 실행된 응용 프로그램만 포함됩니다. 따라서 사용자는 몇 가지 경우를 제외하고 백그라운드에서 실행되는 프로세스에 대해 걱정할 필요가 없습니다. 홈 버튼을 누르면 일반적으로 애플리케이션이 절전 모드로 전환되거나 닫히므로 더 이상 프로세서나 배터리를 로드하지 않고 필요한 경우 필요한 메모리를 확보합니다.

수십 개의 프로세스가 실행 중인 경우 이는 본격적인 멀티태스킹이 아니며, 항상 하나의 응용 프로그램만 포그라운드에서 실행되고 필요한 경우 일시 중지되거나 완전히 꺼집니다. 몇 가지 보조 프로세스만 백그라운드에서 실행됩니다. 이것이 바로 iOS에서 애플리케이션 충돌이 거의 발생하지 않는 이유입니다. 예를 들어 Android는 사용자가 처리해야 하는 실행 중인 애플리케이션에 압도당합니다. 이로 인해 장치 작업이 불편해지고, 다른 한편으로는 시작이 느려지고 애플리케이션 간 전환이 느려지는 등의 문제가 발생합니다.

애플리케이션 런타임 유형

iOS 장치의 애플리케이션은 다음 5가지 상태 중 하나입니다.

  • 달리기: 애플리케이션이 시작되어 포그라운드에서 실행 중입니다.
  • 배경: 여전히 실행 중이지만 백그라운드에서 실행 중입니다(다른 애플리케이션을 사용할 수 있음).
  • 정지된: 여전히 RAM을 사용하고 있지만 실행되지 않음
  • 비활성: 애플리케이션이 실행 중이지만 간접적인 명령(예: 애플리케이션이 실행 중인 상태에서 장치를 잠그는 경우)
  • 실행되지 않음: 애플리케이션이 종료되었거나 시작되지 않았습니다.

방해를 받지 않기 위해 앱이 백그라운드로 들어갈 때 혼란이 옵니다. 홈 버튼을 누르거나 제스처를 사용하여 애플리케이션(iPad)을 닫으면 애플리케이션이 백그라운드로 전환됩니다. 대부분의 앱은 몇 초 내에 일시 중지됩니다(iDevice의 RAM에 저장되어 빠르게 실행될 수 있으며 프로세서를 많이 로드하지 않아 배터리 수명이 절약됩니다). 앱이 계속해서 메모리를 사용하면 문제가 발생할 수 있다고 생각할 수도 있습니다. 수동으로 삭제하여 공간을 확보하세요. 하지만 꼭 그렇게 할 필요는 없습니다. iOS가 대신해 주기 때문입니다. RAM을 많이 사용하는 게임과 같이 백그라운드에 실행 중인 까다로운 애플리케이션이 있는 경우, iOS는 필요할 때 자동으로 해당 애플리케이션을 메모리에서 제거하고 애플리케이션 아이콘을 탭하여 다시 시작할 수 있습니다.

이러한 상태는 멀티태스킹 표시줄에 반영되지 않으며, 패널에는 앱이 중지, 일시 중지 또는 백그라운드에서 실행 중인지 여부에 관계없이 최근에 실행된 앱 목록만 표시됩니다. 현재 실행 중인 응용 프로그램이 멀티태스킹 패널에 나타나지 않는 것을 확인할 수도 있습니다.

백그라운드 작업

일반적으로 홈 버튼을 누르면 해당 애플리케이션이 백그라운드에서 실행되며, 사용하지 않을 경우 10초 이내에 자동으로 일시 정지됩니다. 예를 들어, 팟캐스트를 다운로드하는 경우 시스템은 이를 실행 중인 애플리케이션으로 평가하고 종료를 XNUMX분 지연합니다. 늦어도 XNUMX분 후에는 프로세스가 메모리에서 해제됩니다. 간단히 말해서, 다운로드를 완료하는 데 XNUMX분 이상 걸리지 않는다면 홈 버튼을 눌러 다운로드를 중단하는 것에 대해 걱정할 필요가 없습니다.

백그라운드에서 무기한 실행 중

비활성 상태의 경우 5초 이내에 애플리케이션을 종료하고, 다운로드의 경우 XNUMX분 동안 종료를 지연합니다. 그러나 백그라운드에서 실행해야 하는 소수의 애플리케이션이 있습니다. 다음은 iOS XNUMX에서 백그라운드에서 무기한 실행될 수 있는 앱의 몇 가지 예입니다.

  • 소리를 재생하고 잠시 중단되어야 하는 애플리케이션(전화 통화 중 음악 일시 중지 등),
  • 귀하의 위치를 ​​추적하는 애플리케이션(내비게이션 소프트웨어),
  • VoIP 통화를 수신하는 애플리케이션(예: Skype를 사용하는 경우) 애플리케이션이 백그라운드에 있을 때에도 전화를 받을 수 있습니다.
  • 자동 다운로드(예: 뉴스스탠드).

더 이상 작업(예: 백그라운드 다운로드)을 수행하지 않는 경우 모든 애플리케이션을 닫아야 합니다. 그러나 기본 메일 앱과 같이 백그라운드에서 지속적으로 실행되는 예외가 있습니다. 백그라운드에서 실행 중인 경우 메모리, CPU 사용량을 차지하거나 배터리 수명이 단축됩니다.

백그라운드에서 무기한 실행이 허용된 앱은 실행되는 동안 음악 재생부터 새 팟캐스트 에피소드 다운로드까지 모든 작업을 수행할 수 있습니다.

앞서 언급했듯이 사용자는 백그라운드에서 실행 중인 앱을 닫을 필요가 없습니다. 이에 대한 유일한 예외는 백그라운드에서 실행 중인 앱이 충돌하거나 절전 모드에서 제대로 깨어나지 않는 경우입니다. 그런 다음 사용자는 멀티태스킹 표시줄에서 수동으로 응용 프로그램을 닫을 수 있지만 이런 일은 거의 발생하지 않습니다.

따라서 일반적으로 시스템이 자체적으로 백그라운드 프로세스를 처리하므로 백그라운드 프로세스를 관리할 필요가 없습니다. 그렇기 때문에 iOS는 신선하고 빠른 시스템입니다.

개발자의 관점에서

애플리케이션은 멀티태스킹의 일부로 총 6가지 상태에 반응할 수 있습니다.

1. 신청WillResignActive

번역에서 이 상태는 애플리케이션이 향후(몇 밀리초 정도) 활성 애플리케이션(즉, 포그라운드에 있는 애플리케이션)으로 사임한다는 의미입니다. 예를 들어 애플리케이션을 사용하는 동안 전화를 받을 때 이런 일이 발생하지만 동시에 이 메서드는 애플리케이션이 백그라운드로 전환되기 전에 이 상태를 유발하므로 이러한 변경 사항을 고려해야 합니다. 이 방법은 예를 들어 수신 전화가 있을 때 수행 중인 모든 활동을 일시 중단하고 통화가 끝날 때까지 기다리는 데에도 적합합니다.

2. applicationDidEnterBackground

상태는 애플리케이션이 백그라운드로 전환되었음을 나타냅니다. 개발자는 이 방법을 사용하여 백그라운드에서 실행할 필요가 없는 모든 프로세스를 일시 중단하고 타이머 만료, 반드시 필요하지 않은 메모리에서 로드된 이미지 삭제 또는 종료와 같이 사용되지 않는 데이터 및 기타 프로세스의 메모리를 지워야 합니다. 애플리케이션이 백그라운드에서 연결을 완료하는 것이 중요하지 않은 한 서버와의 연결입니다. 응용 프로그램에서 메서드가 호출될 때 해당 메서드의 일부가 백그라운드에서 실행될 필요가 없는 경우 기본적으로 응용 프로그램을 완전히 일시 중단하는 데 사용해야 합니다.

3. 애플리케이션WillEnterForeground

이 상태는 애플리케이션이 활성 상태로 전환되는 첫 번째 상태와 반대입니다. 상태는 단순히 잠자는 앱이 백그라운드에서 다시 시작되어 다음 몇 밀리초 내에 포그라운드에 표시된다는 것을 의미합니다. 개발자는 애플리케이션이 백그라운드에 있는 동안 비활성 상태였던 모든 프로세스를 재개하려면 이 방법을 사용해야 합니다. 사용자가 로드된 애플리케이션을 다시 보기 직전에 서버에 대한 연결이 다시 설정되고, 타이머가 재설정되고, 이미지와 데이터가 메모리에 로드되고, 기타 필요한 프로세스가 재개될 수 있습니다.

4. applicationDidBecomeActive

상태는 애플리케이션이 포그라운드로 복원된 후 활성화되었음을 나타냅니다. 이는 사용자 인터페이스를 추가로 조정하거나 UI를 원래 상태로 복원하는 데 사용할 수 있는 방법입니다. 이는 실제로 사용자가 디스플레이에서 애플리케이션을 이미 본 순간에 발생하므로 이 방법과 이전 방법에서 무슨 일이 일어나는지 주의 깊게 결정하십시오. 몇 밀리초의 차이를 두고 차례로 호출됩니다.

5. 신청이 종료될 것입니다.

이 상태는 애플리케이션이 종료되기 몇 밀리초 전에 발생합니다. 즉, 애플리케이션이 실제로 종료되기 전입니다. 멀티태스킹에서 수동으로 또는 장치를 끌 때. 이 방법은 처리된 데이터를 저장하고, 모든 활동을 종료하고, 더 이상 필요하지 않은 데이터를 삭제하는 데 사용해야 합니다.

6. applicationDidReceiveMemoryWarning

가장 많이 논의되는 마지막 상태입니다. 필요한 경우 시스템 리소스를 불필요하게 사용하는 경우 iOS 메모리에서 애플리케이션을 제거하는 일을 담당합니다. iOS가 백그라운드 앱으로 무엇을 하는지는 구체적으로 모르지만, 다른 프로세스에 리소스를 릴리스하기 위해 앱이 필요한 경우 메모리 경고와 함께 리소스를 릴리스하라는 메시지가 표시됩니다. 따라서 이 메서드는 응용 프로그램에서 호출됩니다. 개발자는 애플리케이션이 할당한 메모리를 포기하고, 진행 중인 모든 것을 저장하고, 메모리에서 불필요한 데이터를 지우고, 그렇지 않으면 적절하게 메모리를 해제하도록 이를 구현해야 합니다. 많은 개발자, 심지어 초보자라도 이러한 사항에 대해 생각하거나 이해하지 못하는 것이 사실입니다. 그러면 애플리케이션이 백그라운드에서도 배터리 수명을 위협하거나 시스템 리소스를 불필요하게 소모하는 일이 발생할 수 있습니다.

평결

이 6가지 상태와 관련 메서드는 iOS의 모든 "멀티태스킹"의 배경입니다. 애플리케이션이 최소화되거나 시스템에서 경고를 받는 경우 애플리케이션이 사용자 기기에 표시하는 내용에 대해 개발자가 책임을 져야 한다는 사실을 개발자가 무시하지 않는 한 이는 훌륭한 시스템입니다.

드로이 : Macworld.com

저자: Jakub Požárek, 마틴 두벡(ArnieX)

 
당신도 해결해야 할 문제가 있나요? 조언이 필요하거나 적합한 애플리케이션을 찾으시나요? 섹션에 있는 양식을 통해 주저하지 말고 문의해 주세요. 상담, 다음번에는 귀하의 질문에 답변해 드리겠습니다.

.