본문 바로가기

IT related

아이폰 - 멀티태스킹 바..바르게 알기


iOS와 관련해서는 잘 못 알려진 사실들이 많다. 애플 지니어스(Apple Geniuses)와 같은 믿을 만한 소식통으로 여겨지는 곳도 제대로 파악하지 못한 것들도 있다. 특히, iOS의 멀티태스킹 동작 방식은 여러 가지 부정확한 것들이 마치 사실처럼 이야기 되고 있다. 
 
많은 사람들은 다음과 같이 이야기 한다.
 
iOS 기기에서 멀티태스킹 바에 있는 모든 앱들은 모두 활성화된 상태이기 때문에 속도 저하, 메모리 차지, 또는 배터리 소모를 유발한다. 그렇기 때문에 성능과 배터리 수명을 극대화하기 위해서는, 수동으로 그러한 앱들을 종료시켜야 한다.
 
하지만 iOS 멀티태스킹 바에 모든 실행 중인 앱 목록이 포함되는 것은 아니다. iOS 멀티태스킹 바에는 가장 최근 사용된 앱이 순서대로 포함될 뿐이다. 그러므로 사용자는 iOS 상의 백그라운드 태스크를 관리할 필요가 없다.
 
앞으로 이야기 할 몇몇 사례를 제외하고, 멀티태스킹 바에 있는 앱들이 모두 실행 중인 것은 아니다. 사용자가 홈 버튼을 누르면, iOS는 실행 중이던 앱을 종료한다. 거의 모든 경우에 앱은 종료되고 프로세서 타임(그러므로 배터리도)의 사용이 중단되며 필요한 경우에는 사용 중이던 메모리도 회수된다.
 
앱의 5가지 상태
iOS 앱에는 다음의 5가지 실행 상태가 있다. 
• 비실행 : 중지 혹은 실행되지 않은 앱의 상태.
• 비활성 : 실행되었지만 이벤트를 받지 않고 있는 앱의 상태 (예를 들어, 앱이 활성화된 상태에서 기기가 잠금 설정된 경우)
• 활성 : “사용 중”인 앱의 일반적인 상태.
• 백그라운드 : 화면에 나타나지 않지만 코드는 여전히 실행되고 있는 상태.
• 중지 : 메모리 상에 존재하긴 하지만 코드가 실행되고 있지는 않은 상태.
 
여기에서 활성이냐 비활성이냐는 서로 관련이 없다. 대부분 혼란스러운 것은 활성에서 백그라운드로, 중지로 그리고 비실행 상태로 바뀌면서 어떻게 되는가 이다. 
 
사용자가 홈 버튼을 누르면, 앱은 활성에서 백그라운드 상태로 바뀐다. 그러면 대부분의 앱들은 몇 초가 지나면 백그라운드에서 중지 상태로 변환된다. 중지된 상태의 앱들은 기기의 메모리 상에 남아 있는다. 그러므로 다시 활성 상태로 바뀔 때 재빠르게 상태가 전환될 수 있다. 이러한 상태의 앱들은 프로세서 시간과 배터리 전력을 소모하지 않는다.
 
앱이 메모리 상에 잔류한다면 메모리를 절약하기 위해 수동으로 그것을 제거해야 한다고 생각하는 사용자들도 있을 수 있다. 그러나 그렇게 할 필요는 없다. iOS가 그러한 작업을 알아서 수행하기 때문이다. 사용자가 게임과 같은 메모리를 많이 소비하는 앱을 실행하는 경우, iOS는 메모리에서 중단 상태의 앱을 제거하고 비 실행 상태로 전환시킨다. 즉, 그러한 앱들은 메모리 상에서 완전히 삭제되고 차후에 사용자가 해당 앱을 다시 누르면 새로운 상태로 실행된다.
 
“이러한 상태들이 멀티태스킹 바에는 반영되지 않기 때문에” 여기에서 혼란이 발생한다. 멀티태스킹 바는 앱의 상태가 백그라운드, 중지, 혹은 비 실행 상태인지에 관계 없이 최근에 실행된 앱의 목록만을 보여준다(현재 활성 상태인 앱은 멀티태스킹 바에 나타나지 않는다.). 
 
백그라운드 태스크
필자가 좋아하는 팟캐스트 앱인 인스타캐스트(Instacast)와 같이 약간 용량이 큰 파일을 웹에서 다운로드하는 앱을 예로 생각해보자. 활성 상태인 경우 인스타캐스트는 새로운 팟 캐스트를 다운로드하기 시작한다. 기본 설정으로, 사용자가 아이폰에서 홈 버튼을 누르면, 인스타캐스트는 중지 상태로 전환되기 전 5초 동안 백그라운드 상태로 실행된다. 그렇게 되면 팟캐스트의 다운로드가 중단되고, 파일 크기 때문에 약간의 시간이 소모된다. 
 
그러나 iOS는 백그라운드 상태에서 실행 시 시간이 많이 소요되는 작업이 있는 인스타캐스트와 같은 앱의 경우 유예를 허용하기도 한다. 인스타캐스트 앱은 “백그라운드 태스크”로 팟 캐스트를 다운로드할 것이라 요청할 수 있다. 그렇기 때문에 사용자가 홈 버튼을 누른 이후에도 다운로드를 완료하기 위해 추가적인 백그라운드 실행 상태를 유지할 수 있다. 
 
인스타캐스트가 하루 종일 실행되는 것은 아니다. iOS가 강제로 앱을 중지시키기 전 앱은 약 10분의 백그라운드 실행 상태를 유지할 수 있다. 그렇지만 그러한 기능은 일반적인 사용자가 걱정할 정도는 아니다. 
무한 백그라운드 실행
그러므로 모든 앱은 종료 작업을 마무리하기 위해 5초의 백그라운드 실행 상태를 유지하고 몇몇 앱(인스타캐스트와 같은)은 10분간의 연장 시간을 요청할 수 있다. 그러나 몇몇 앱들은 백그라운드로 계속해서 실행될 필요가 있고 iOS는 그러한 기능을 허용한다.  
 
iOS 5에서 무한 백그라운드 실행 상태를 가질 수 있는 앱의 종류는 다음과 같이 5가지가 있다. 
• 백그라운드 상태로 오디오를 재생하는 앱 : 팟캐스트를 재생하는 인스타캐스트가 그러한 예이다. 
• 백그라운드로 사용자의 위치를 추척하는 앱 : 예를 들어, 사용자가 다른 앱을 실행하고 있는 상태에서 턴-바이-턴 GPS 내비게이션의 음성 명령을 이용하고자 하는 경우. 
• VoIP 콜의 수신을 대기하는 앱 : iOS에서 스카이프(Skype)를 사용하는 경우, 백그라운드 상태에서 스카이프 통화 수신을 대기할 수 있다. 
• 새로운 콘텐츠를 다운로드하는 뉴스 앱
• 백그라운드에서 외부 장치로부터 지속적으로 업데이트를 수신하는 앱 
 
위의 5가지 항목에 속하는 앱 중 제대로 개발된 앱들은 더 이상 작업을 수행 중이지 않는 경우 중지 상태를 유지한다. 인스타캐스트에서 팟캐스트 실행이 완료된 경우, 중지 상태로 바뀐다. iOS에서 백그라운드로 무한 실행되는 내장 앱도 있는데, 사용자들이 가장 많이 사용하는 그러한 앱으로는 메일(Mail)이 있다. 
 
이러한 앱이 백그라운드 상태로 실행되는 한, 메모리, CPU 타임, 그리고 전력은 소비되기 마련이다. 백그라운드 상태에서 무한 실행될 수 있는 앱은 활성 상태에서 할 수 있는 모든 기능을 할 수 있다는 것이 중요하다. 그러한 기능에는 오디오 재생 혹은 사용자 위치 추적 이상의 매우 다양한 것들이 있을 수 있다. 예를 들어, 인스타캐스트는 오디오를 재생하는 동시에, 백그라운드 상태로 계속해서 새로운 에피소드를 다운로드할 수도 있다. 
 
일반적으로 사용자는 이런 앱을 사용하고 있다는 것을 알아야 한다. 개발자는 백그라운드 실행 상태 중 어떠한 유형을 요청하는지 밝혀야 하고, 비록 모든 앱 스토어 리뷰가 항상 완벽한 것은 아니지만, 앱 스토어 리뷰 과정에서 이런 내용이 남용되지 않는 가를 확인해야 한다. 
 
앞에서 “사용자는 iOS 상의 백그라운드 태스크를 관리할 필요가 없다”고 했다. 이것의 유일한 예외는 이러한 백그라운드 실행 앱이 이상 상태에 빠지거나 적절하게 중지 되지 않는 경우이다. 그러한 경우, 사용자는 멀티태스킹 바에서 해당 앱을 수동으로 삭제할 수 있다. 그러나 이러 경우는 흔치 않고 iOS 사용자에게 일반적인 것은 아니다. 그렇기 때문에 필자는 위치 서비스를 사용하는 앱이 보여지는 것과 유사한 방식으로 iOS가 현재 어느 앱이 무한 백그라운드 상태인지를 더 잘 보여줄 수 있을 것이라 생각한다. 
 
요약
이 글을 요약하자면 다음과 같다:
1. 누군가가 멀티태스킹 바에 있는 모든 앱은 실행 중이어서 메모리와 전력은 소비한다고 말한다면, 그것을 틀린 말이다. 
2. 사용자가 홈 버튼을 누르면, 앱은 활성 상태에서 백그라운드 상태로 전환되고 재빠르게 중지 상태로 바뀌어 CPU 타임과 전력을 더 이상 소비하지 않는다. 
3. 중지 상태로 바뀌기 전 대규모 작업의 완료를 위해 앱은 10분 간의 추가 시간을 요청할 수 있다. 
4. 만약 메모리가 부족한 경우, iOS는 자동적으로 중지 상태인 앱을 비 실행 상태로 전환하고 메모리를 회수한다. 
5. 오디오, GPS, VoIP, 뉴스, 그리고 외부장치 앱 등 5가지 종류의 앱과 메일과 같은 몇몇 내장 앱은 작업 완료 시까지 백그라운드에서 무한 상태로 실행될 수 있다. 
 
간단히 말해서, 사용자는 iOS에서 백그라운드 태스크를 관리할 필요가 없다. 시스템이 알아서 거의 모든 것을 처리하고 제대로 개발된 오디오, GPS, VoIP, 뉴스, 그리고 외부장치 앱이 나머지를 처리할 수 있다. editor@itworld.co.kr

[출처:itworld.co.kr]