2011-07-26 4 views
4

지도 파일을 많이 다운로드하는 프로세스가있는 iPad 앱이 있습니다. 몇 가지 데이터와 수천 개의 파일을 다운로드 할 수 있습니다.내 iPad 앱으로 인해 기기가 재부팅 될 수 있습니까?

최근 시험판에서는 다운로드 과정에서 기기가 재부팅되는 경우가 있습니다 (다운로드에는 몇 시간이 걸릴 수 있음).

앱을 재부팅해도 충돌 보고서가 남지 않습니다. 우리는 iPad 1과 4.3.3을 실행하는 iPad 2 모두에서이 동작을 관찰했습니다.

내가 생각할 수있는 유일한 점은 이러한 다운로드를 수행 할 때 최대 동시 스레드 수를 4에서 20으로 늘린 것입니다.

답변

6

시스템 메모리를 완전히 소모하면 장치가 하드 재부팅됩니다. 이것은 iPhone OS 2.0에서 흔히 사용되는 것으로, 초기 iPhone 및 iPod touch의 제한된 하드웨어에서 실행되었습니다. 최근 OS 버전에서 Apple은 메모리 상한을 초과 할 때 응용 프로그램을 강력하게 강제 적용하기 때문에이를 수행하는 것이 훨씬 더 어려워졌습니다. 또한 장치는 이전보다 훨씬 많은 메모리를 가지고 있습니다.

때로는 이렇게 할 수있는 한 가지 방법은 응용 프로그램에서 사용하는 메모리로 즉시 식별되지 않을 수있는 많은 큰 텍스처 또는 기타 그래픽 구성 요소를로드하는 것입니다. 나는 단단한 루프에서 GPU에 데이터 더미를로드 할 때 시스템 재부팅을 일으킬 수있었습니다. 여기서 비슷한 점이있을 수 있습니다.

시스템이 응용 프로그램을 종료하기 전에 데이터를 메모리에 덤프하는 것이 더 쉬울 수도 있지만, 이것이 활성 스레드 수와 관련이 있는지 의심 스럽습니다.

제쳐두고, 리소스를 소비하는 스레드 더미가 아니라 GCD 또는 ASIHTTPRequest와 같은 큐 기반 프레임 워크를 사용 했습니까? 이것들은 당신의 애플리케이션에 더 효율적일 수 있지만, 여전히 필요한 동시성을 제공한다.

+0

브래드 감사합니다 ... 언제나처럼 위대한 답변. 우리는 ASIHTTP를 사용합니다 ...이 문제는 최대 동시 스레드 수를 4로 설정했을 때 시작되었습니다. 20 번에서 많은 수의 트리거가 발생하고 거의 10 번에서 트리거됩니다. 한 번의 충돌 경우에도 50 개의 스레드가 실행 중입니다. –

0

메모리 관리로 인해 응용 프로그램이 비정상적으로 작동합니다. 몇 GB의 데이터를 다운로드 중이므로 디스크 공간이 부족합니다. 재부팅하는 데 몇 시간이 걸릴지 확실하지 않습니다.

일부 코드를 게시 해보세요.

+1

OP는 다운로드 프로세스가 재부팅되는 것이 아니라 몇 시간이 걸릴 수 있다는 것을 의미합니다. – Coeffect

+0

그럼 더 명확하게 만들어야합니다. 계속해서 몇 기가 바이트의 데이터를 다운로드하는 데는 몇 시간이 걸릴 수 있습니다. – WrightsCS

0

계측기에서 디버그하셨습니까? 할당이 증가하고 메모리를 채우는 경우이 표시됩니다. 이 GB를 메모리에로드하려는 경우 충돌이 발생할 수 있습니다.

또한 스레드 대신 dispatch_apply를 살펴 보았습니까? GCD는로드에 따라 사용하는 스레드를 자동으로 배포하고 늘리거나 줄입니다. 이렇게하면 직접 관리 할 필요가 없습니다. 그것은 가치가있을 것입니다.

관련 문제