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)
당신도 해결해야 할 문제가 있나요? 조언이 필요하거나 적합한 애플리케이션을 찾으시나요? 섹션에 있는 양식을 통해 주저하지 말고 문의해 주세요. 상담, 다음번에는 귀하의 질문에 답변해 드리겠습니다.
안녕하세요. 정말 멋진 기사입니다. 그런데 이에 대한 기술 지원이 있는지 궁금합니다. 저녁에 잠자리에 들기 전에 여러 번 배터리를 해결했는데 Wi-Fi와 모바일 데이터를 끈 상태에서 Wi-Fi를 끄고 3G만 사용한 다른 경우보다 더 많은 시간이 걸렸기 때문입니다.
불행하게도 iOS에서는 애플리케이션을 수동으로 꺼야 하고 시스템이 더 이상 이전처럼 잘 실행되지 않는다는 경험이 있습니다.
iPhone을 Windows Phone(Samsung Omnia W for 6200,-)으로 교체했는데 시스템 속도가 완전히 다른 수준이 되었습니다.
윈도우 8 메트로 태블릿이 나오면 아이패드도 교체할까 두렵네요...
@007 – 예, 기존 iPhone3G를 새로운 WP와 비교한다면 예(누가 예상했겠습니까?) WP가 상당히 더 빠를 것입니다. 그렇지 않으면 Karlulka에 대한 소문이 당신과 잘 어울리지 않으며 현재 HW를 비교하는 것이 적절했습니다. 저도 WP7을 구입했는데 결국 WP4과는 완전히 다른 수준의 사용성을 나타내는 7s를 갖게 되었습니다. 타일을 즐겁게 끝없이 스크롤하십시오.
나는 Paja의 말에 전적으로 동의합니다.
나는 또 다른 배럴의 잔해인 Samsung Galaxy S와 iPhone 4에서 다시 기여할 것입니다. 나이 측면에서 비슷하다고 말할 수 있습니까? iOS 4 당시, 그리고 Android가 아닌 다른 곳에서 사용성 및 속도 측면에서 Apple은 애플리케이션 작업 개념을 매우 잘 해결했지만 Android에서는 더 이상 동일하지 않습니다. 결국 저는 어쨌든 4S를 선택했고 아무런 불만도 없습니다. 왜냐하면 "그냥 작동하고" .. 그리고 매우 빠르게 작동하기 때문입니다!
이론은 아름답습니다... 하지만 실제로는 여전히 바에서 신청서를 닫습니다 ;)
매우 흥미롭고 실용적이며 흥미롭습니다. 스윙과 깊이가 부족하지 않습니다. 이 금지된 브랜드에 대한 오늘날 청소년의 집착을 크게 강조합니다! 하지만 그녀와 이 기사에 감사드립니다.
기사가 완전히 잘못되었습니다.
잘못 설명된 것처럼 홈 버튼을 눌러도 애플리케이션이 종료되지 않고 일시 중지됩니다. 즉. 메모리에서 삭제하거나 종료하지 마십시오. 실행을 일시 중지하면 iOS는 이 앱에 0% CPU 시간을 제공합니다. 기사에 명시된 바와 같이 iDevice 메모리의 어느 곳에서도 "교환"되지는 않습니다. 앱전환이 가능하다는 점은 정말 감사한 일입니다.
전화기에 더 높은 우선순위의 다른 애플리케이션을 실행할 메모리가 거의 없으면 해당 애플리케이션은 메모리에서 제거됩니다(일반적으로 다른 애플리케이션이 포그라운드에서 실행 중임).
첫 번째 경우에는 당신 말이 맞습니다. 번역 오류였습니다. 스와핑에 관해서는 여기서 말하는 것이 아니고, iOS 기기의 저장 공간이 아닌 동작 메모리에 관한 것입니다.
애플리케이션의 이미지는 명령에 의해 다시 호출될 때까지 제한된 시간 동안 메모리에 저장됩니다(13,7GB 중 16GB 참조: 2,3GB는 시스템 및 일시 중단된 애플리케이션용으로 예약되어 있음).
따라서 내비게이션, Skype 등과 같은 애플리케이션을 구별해야 합니다. 이러한 애플리케이션은 백그라운드에서도 활성 상태로 유지되거나 특정 기능이 종료되지 않고 계속됩니다(예: 위치 또는 위치 정보에 대한 데이터 전송). 또는 포드 모드의 Vokul처럼 청취 및 멀티태스킹이 여전히 백그라운드에서 청취됩니다.
이러한 애플리케이션은 배터리를 소모하므로 iOS를 기다리지 않고 수동으로 닫아야 합니다. 다른 경우에는 필요하지 않으며 응용 프로그램이 충돌하는 경우에만 필요합니다.
나는 기사에 동의할 수 없다. 최소 1세대 iPad(iOS 5.0.1)에서는 멀티태스킹 표시줄에 "열린" 앱이 많이 있는지 아니면 몇 개만 있는지 명확하게 알 수 있습니다. iOS는 메모리를 정리하려고 시도하지만 분명히 충분하지 않습니다. RAM의 작은 크기가 아마도 가장 큰 약점일 것입니다.
따라서 사용되는 시스템과 하드웨어에 따라 많은 것이 달라지며, 1세대 iPad에서보다 iOS 5.0.1이 설치된 iPad 2에서 상황이 더 나빠질 것이라는 것은 상당히 논리적입니다.
죄송합니다. 이것은 이상적인 작동 방식에 대한 설명입니다. 불행하게도 현실은 완전히 다르며, 적어도 저만큼(가끔) Apple 제품을 사용해 본 적이 있다면 여러분도 이를 아실 것입니다.
"iOS에서 백그라운드로 실행되는 앱이 운영 메모리를 꽉 채운다는 미신을 자주 듣습니다."
그것은 미신이 아니라 단지 사실일 뿐입니다. 결국, 당신은 기사에서 직접 주장합니다.
"앞서 언급했듯이 사용자는 백그라운드에서 실행 중인 애플리케이션을 닫을 필요가 없습니다."
무의미한 말. 그건 그냥 헛소리야, 사과 선전이니까, 나한테 화내지 마.
“하지만 그렇게 할 필요는 없습니다. iOS가 대신 해주기 때문이죠. 대용량 RAM을 사용하는 게임과 같이 까다로운 애플리케이션이 백그라운드에 정지되어 있는 경우, iOS는 필요할 때 자동으로 해당 애플리케이션을 메모리에서 제거하고 애플리케이션 아이콘을 탭하여 다시 시작할 수 있습니다.”
사실이 아니다. 상황은 조금 다릅니다. 전형적인 예 – 백그라운드에서 실행 중인 까다로운 애플리케이션이 있고 게임이 필요합니다. 브라우저를 실행하고 탭 몇 개를 엽니다. -> 더 많은 메모리가 필요합니다. 무슨 일이 일어날 것? 백그라운드에서 애플리케이션을 계속 요구하는데, 반대로 브라우저 자체가 실패합니다. 까다로운 응용 프로그램을 수동으로 닫으면 브라우저가 문제없이 오랫동안 작동합니다.
이것은 이론이 아니라 실천입니다. 그리고 Apple 제품을 오랫동안 사용해오신 분들이 아직도 이 사실을 모르고 계시다는 사실에 놀랐습니다.
고마워요, 이것은 매우 잘 설명되어 있고 잘 설명되어 있습니다. 많은 도움이 되었습니다 ;-) ♥
우선, 저는 Android와 마찬가지로 iOS를 찬성하지도 반대하지도 않습니다. 하지만 여기에 쓰여진 것처럼 몇 가지 이상한 점이 있습니다. "iOS에서는 애플리케이션 충돌이 거의 발생하지 않습니다." Android 앱에서는 충돌이 발생합니다. 1년에 한 번: -P
http://dotekomanie.blog.mobilmania.cz/2012/02/stabilita-ios-vs-android/
네, 그런데 수동으로 애플리케이션을 닫아야 하는 경우가 정말 적거든요. 한 번 정도 사용했나요? ;-) 그리고 Mobilemania에서 비교 테스트에 대한 링크를 제공하는 것은 의미가 없습니다. Google이 지불한 광고에 대해 읽고 싶을 때 그곳을 살펴보겠습니다 ;-) 누구나 손에 안드로이드 휴대폰을 얻을 수 있으며 즉, 시스템이 어느 정도 맞춤 제작된 Galaxy Nexus를 제외하고는 깔끔하게 실행되지 않습니다. 전반적으로 안드로이드는 재앙이다
@Mek – 저는 몇 년 동안 매일 Apple 제품을 사용해 왔지만 이런 일이 일어난 적이 없으므로 귀하의 이론은 어떻게 든 작동하지 않습니다.
OT :
@redakce – 웹 사이트가 지속적으로 작업 중이거나 웹 사이트에서 어떤 일이 일어나고 있는 것을 볼 수 있지만 모든 것이 제대로 작동하는 데 일주일도 걸리지 않는다는 느낌이 듭니다. 그리고 나는 새로운 모습이 나에게 적합하지 않기 때문에 더 이상 여기에 오지 않습니다. 적어도 iPhone에서는 모바일 버전을 사용했는데 지금은 전혀 작동하지 않습니다. 왜죠? 현재 댓글의 게시물에 응답하지 않습니다.
@SteveJSF 불행하게도 상황이 항상 우리가 원하는 대로 되는 것은 아닙니다. 답변에 관해서는 새 SEO 플러그인을 중단하셨으며 현재 해결 중입니다.
WP-Touch도 어떤 이유로 서비스를 종료했기 때문에 이 플러그인보다 더 나은 솔루션을 찾기로 결정했습니다. 그럼 다음 소식도 곧 기대해 주세요 :-)
좋은 기사입니다. 연습에 관한 한, 나는 몇 가지 사항에 동의하며 대부분 명시된 대로 작동하지만 안타깝게도 여전히 올바르게 작동하지 않는 서툴게 작성된 응용 프로그램이 있으며, 다음과 같은 경우가 있다고 말하고 싶습니다. 일부 독자들이 지적했습니다. 저는 Skype가 매우 좋은 예라고 생각합니다. 실제로 백그라운드에서 여전히 실행되고 있다는 것을 알고 있지만(그래도 괜찮고 그렇게 되어야 합니다) 문제는 이 애플리케이션이 장치의 배터리를 많이 소모한다는 것입니다. 이제 제대로 볼 수가 없어요 . 반대로 Facebook, Badoo 등과 같은 애플리케이션은 그들은 여전히 백그라운드에서 실행되고 있지만 소비는 거의 눈에 띄지 않습니다 (적어도 나는 아무것도 눈치 채지 못합니다). 그래서 오류는 개별 응용 프로그램에 있다고 생각합니다. 어떤 것을 알고 있다면 해당 항목만 수동으로 끄는 것만으로도 충분합니다!
따라서 Facebook은 필요에 따라 실행되고 Skype는 필요할 때만 실행됩니다.
반면에 배터리를 절약해야 하고 iPhone을 가능한 한 오랫동안 "활성" 상태로 유지해야 한다는 것을 알고 있다면 멀티태스킹에서 불필요한 모든 것을 끄기도 하지만 대부분 큰 영향을 미치지 않습니다. 하지만 필요한 경우 3G, 모든 모바일 인터넷, Wi-Fi, 위치 서비스, 비행기 모드, 조명 강도 등을 제한합니다. 또한 일상적인 작업의 일환으로 멀티태스킹에서 앞서 언급한 애플리케이션을 끕니다.
따라서 개인적으로 나는 이 기사가 사실이라고 생각합니다. 불행하게도 일부 프로그래머는 그들의 응용 프로그램이 올바르지 않기 때문에 이러한 것들을 반박하며 제 생각에는 이에 대한 해결책은 두 가지뿐입니다. 응용 프로그램을 사용하지 않고 찾을 수 있는 경우 가능하다면 대안, 또는 1. 가능하지 않은 경우에는 Skype 등을 참조하여 해당 프로그래머에게 보고서를 작성하고 그들이 이에 대해 조치를 취하기를 바랍니다.
앱을 수동으로 비활성화하는 것은 의미가 없을 수도 있지만 어쨌든 그렇게 합니다. 또한 응용 프로그램 시스템을 끄지 않고 실행되도록 하려고(또는 백그라운드에서 잠자기 상태로 두기) 배터리 수명이 훨씬 짧았으며 약 2주 후에 iPad XNUMX를 다시 시작해야 했고 반응이 느렸습니다. 그래서 앱을 수동으로 꺼서 배터리도 더 오래가고, 최근 크리스마스에 재부팅했는데 잘 돌아가고 있어요.
그건 그렇고, 나는 Mac OS X에서도 같은 일을 합니다. 필요하지 않은 응용 프로그램을 닫습니다(CMD+Q). 백그라운드에서 잠자기 상태로 두어 불필요하게 RAM을 소모하는 것보다 낫습니다(OS X에서는 잘 작동하지 않습니다). RAM은 8GB에 불과하지만 7GB의 Windows 8에서는 시스템이 느리게 반응하거나 교체되지 않았습니다. OS X에서는 이는 상당히 일반적인 현상입니다. 컴퓨터를 끄지 않았고 Mac에서도 수행합니다. 따라서 한 달 이상의 가동 시간도 예외는 아닙니다. 문제는 RAM을 확보하고 "속도를 높이기" 위한 예방 조치로 때때로 Mac을 다시 시작해야 한다는 것입니다. Windows 7에는 이것이 필요하지 않습니다.
실제로 응용 프로그램을 폭발시키는 방법에 더 관심이 있습니다. 나에게 일어난 일은 애플리케이션(특히 지오캐싱)이 상위 서버에서 무언가를 로드하는 중 상태가 되어 그 상태에 멈춰 있다는 것입니다. 홈 버튼이 작동했지만 재부팅 후 정지 상태(중단했던 위치)로 돌아갔습니다. 수동 종료(멀티테이스팅 메뉴로 이동하려면 아이콘과 마이너스를 길게 눌러 닫으세요) = 응용 프로그램이 사라졌고, 다시 시작한 후 원래 상태로 열리며 정지되었습니다. 그래서 모든 것을 닫고 전화기를 껐다가 켠 다음 홈을 두 번 클릭하고 보라. 응용 프로그램은 끄기 직전에 닫히기 전의 상태로 모두 존재했습니다. 다시 시작해도 도움이 되지 않았습니다. 뜨거워질 때까지 집과 위쪽을 유지하세요. 도움이 된 유일한 방법은 휴대폰에서 애플리케이션을 제거하고 다시 시작한 다음 휴대폰에 다시 설치하는 것뿐이었습니다. 왠지 나는 그것을 받아들이지 않았습니다.
이 멀티태스킹 관리는 작동하며 이러한 상황에 대처하는 것은 개발자의 몫입니다. 전체 상황에 대해 더 자세하고 전문적인 설명에 관심이 있는 분들을 위해 여기에 그 상황을 적어보겠습니다.
애플리케이션은 총 6가지 상태에 응답할 수 있으며 이러한 상태는 다음과 같습니다.
신청WillResignActive
applicationDidEnter배경
신청WillEnterForeground
애플리케이션DidBecomeActive
신청이 종료됩니다
애플리케이션DidReceiveMemoryWarning
이제 이러한 상태를 더 자세히 설명하겠습니다.
applicationWillResignActive – 이 상태는 향후(몇 밀리초 정도) 애플리케이션이 활성 애플리케이션(즉, 포그라운드 애플리케이션)으로 사임한다는 것을 의미합니다. 이는 예를 들어 애플리케이션을 사용하는 동안 전화를 받을 때 발생하지만 동시에 이 따라서 이 상태는 애플리케이션이 백그라운드로 전환되기 전에도 트리거되므로 이러한 변경 사항을 고려해야 합니다. 이 방법은 예를 들어 수신 전화가 있을 때 수행 중인 모든 활동을 일시 중단하고 통화가 끝날 때까지 기다리는 데에도 적합합니다.
applicationDidEnterBackground - 이 상태는 애플리케이션이 백그라운드에 진입했음을 나타냅니다. 개발자는 이 방법을 사용하여 백그라운드에서 실행할 필요가 없는 모든 프로세스를 일시 중지하고 사용되지 않는 데이터 및 기타 프로세스의 메모리를 정리해야 합니다(예: 만료 타이머, 지우기). 애플리케이션이 백그라운드에서 연결을 완료하는 것이 중요하지 않은 경우 반드시 필요하지 않은 메모리 로드 이미지 또는 서버와의 연결을 종료합니다. 기본적으로 애플리케이션에서 호출될 때 이 메서드는 애플리케이션의 일부가 백그라운드에서 실행될 필요가 없는 경우 애플리케이션을 완전히 일시 중단하는 데 사용해야 합니다.
applicationWillEnterForeground – 이 상태는 애플리케이션이 활성 상태로 전환되는 첫 번째 상태와 반대입니다. 이 애플리케이션 상태는 단순히 다음 몇 밀리초 안에 휴면 중인 애플리케이션이 배경에서 재개되어 전경에 나타날 것임을 의미합니다(애플리케이션이 전경에 들어감). 개발자는 이 방법을 사용하여 애플리케이션이 비활성화된 동안 비활성 상태였던 모든 프로세스를 재개해야 합니다. 백그라운드에서는 서버에 대한 연결이 다시 설정되고, 타이머가 재설정되고, 이미지와 데이터가 메모리에 로드되고, 기타 필요한 프로세스가 사용자가 로드된 애플리케이션을 다시 보기 직전에 재개될 수 있습니다.
applicationDidBecomeActive – 이 상태는 애플리케이션이 포그라운드로 복원된 후 방금 활성화되었음을 나타냅니다. 이는 사용자 인터페이스를 추가로 조정하거나 UI를 원래 상태로 복원하는 데 사용할 수 있는 메서드입니다. 이 메서드는 실제로 발생합니다. 사용자가 이미 디스플레이에서 볼 수 있는 경우, 이 방법과 이전 방법에서 무슨 일이 일어나고 있는지 대차대조표를 통해 확인해야 합니다. 몇 밀리초의 차이를 두고 차례로 호출됩니다.
applicationWillTerminate - 이 상태는 애플리케이션이 종료되기 몇 밀리초 전에 발생합니다. 즉, 애플리케이션이 실제로 종료되기 전입니다. 멀티태스킹에서 수동으로 또는 장치를 끌 때. 이 방법은 처리된 데이터를 저장하고 모든 활동을 종료하며 더 이상 필요하지 않은 데이터를 삭제하는 데 사용해야 합니다.
applicationDidReceiveMemoryWarning - 이는 여기서 많이 논의되는 조건입니다. 필요한 경우 iOS는 시스템 리소스를 불필요하게 사용하는 경우 애플리케이션을 메모리에서 제거합니다. iOS가 백그라운드 앱으로 무엇을 하는지 정확히 모르지만, 다른 프로세스에 리소스를 릴리스하기 위해 앱이 필요한 경우 보유하고 있는 리소스를 릴리스하라는 메모리 경고 메시지가 표시됩니다. 따라서 이 메서드는 애플리케이션에서 호출되며, 개발자는 애플리케이션이 가지고 있는 메모리를 포기하고 처리된 내용을 저장하고 메모리에서 불필요한 데이터를 삭제하는 등 메모리를 적절하게 해제하도록 구현해야 합니다. 많은 개발자, 예를 들어 초보자가 이러한 사항에 대해 생각하지 않거나 이해하지 못하는 것이 사실이며, 이로 인해 애플리케이션이 배터리 수명을 위협하거나 백그라운드에서도 시스템 리소스를 불필요하게 소모하는 일이 발생할 수 있습니다. 애플리케이션이 메모리 경고를 받은 후 아무 작업도 수행하지 않고 이전과 같이 시스템 리소스를 계속 소비하는 경우 iOS가 어떻게 작동할지 모르겠습니다.
이러한 몇 가지 상태 및 관련 방법은 iOS의 전체 "멀티태스킹" 뒤에 있습니다. 개발자가 앱이 최소화될 경우 사용자 기기에 어떤 내용이 표시되는지에 대해 책임을 져야 한다는 점을 무시하지 않는다면 훌륭한 시스템입니다. 또는 시스템 등에서 경고를 받습니다.
이 간략한 설명이 응용 프로그램이 모든 작업을 원활하게 수행하는 데 어떻게 관여하는지 이해하는 데 도움이 되기를 바랍니다. 따라서 이는 사용자의 잘못된 사용 실수라고 거의 가능합니다. 이는 아마추어 개발자가 제공하는 무료 애플리케이션을 대부분 대량으로 사용하는 경우 iOS 장치가 대용량을 사용하는 경우보다 더 나쁘게 실행된다는 점으로 이해될 수 있습니다. 숙련된 개발자나 전문 개발자가 제공하는 무료 및 유료 애플리케이션의 수. 이는 두 서클 모두에 예외가 없다는 의미는 아닙니다. 예를 들어, Foursquare는 매우 이상하고 까다롭게 행동하며 동시에 메모리 및 배터리 관리에 많은 시간을 투자하는 매우 숙련된 개발자일 것으로 예상할 수 있지만 사실은 그 반대입니다. 4SQ의 가장 큰 문제점은 서버와의 통신이 자주 중단되고 과부하가 걸리는 것입니다. 이는 잘 알려진 애플리케이션에도 문제가 있다는 사실을 보여주는 예일 뿐이며, 이는 4SQ가 훌륭한 서비스라는 사실을 바꾸지 않습니다.
즐거운 사과하세요!! :)
저자의 허락을 받아 기사에 정보를 추가했습니다 ;-)
죄송합니다. ENTER는 단락 사이 어디에나 있었습니다. 여기에서 주석에 최소한 약간의 서식 있는 텍스트 형식이 포함되도록 뭔가를 할 수 있었습니다.
ArnieX: 댓글 감사합니다!!
그 Faramir: 나는 단지 당신의 문제에 관한 것인데, 그것이 당신의 경우에 도움이 될지는 모르겠지만, 내 경험을 통해 당신이 (멀티태스킹에서) 응용 프로그램을 닫으면 닫힐 때까지 몇 초가 걸린다는 것을 압니다. 완전히 종료될 때까지 몇 초 동안 기다린 다음(확실히 확인하려면 약 10초 정도 기다림) 그런 다음 다시 시작하는 것이 좋습니다.
천만에요 ;) 제가 기여할 기회가 있다면 기꺼이 도와드리겠습니다.
Meeb을 통해 ICQ나 FB 채팅에 로그인하면 10분 후에 자동으로 로그아웃되고 오프라인 상태가 되거나 계속 작동합니까? 설명해 주셔서 감사합니다 :P
10분 후에는 애플리케이션의 인터넷 연결이 중단됩니다. 그러나 귀하는 Meeba 서버에서 계속 온라인 상태를 유지하며 누군가 귀하에게 편지를 보내면 푸시 알림을 받게 됩니다. 애플리케이션을 다시 실행하면 잠시 후 연결이 이루어지며, 즐겁게 채팅을 이어가실 수 있습니다.
따라서 귀하가 올바르게 링크한 기사를 제가 이해했다면 통계는 응용 프로그램이 시작될 때 충돌하는 것에 대해서만 언급하며 이는 충돌이 발생할 수 있는 경우의 상당히 작은 비율입니다. 따라서 이 "연구"를 통해 제 생각에는 iOS가 덜 안정적이라는 결론을 내리는 것은 불가능합니다. 게다가 Forbes에서 가져온 기사의 번역자는 애플리케이션 충돌에 대한 데이터를 제공하는 회사가 Google의 지원을 받는다는 사실을 언급하는 것을 잊어버렸습니다("Google Ventures가 지원하는 Crittercism...").