programing

iOS 애플리케이션이 백그라운드로 이동하면 긴 작업이 일시 중지됩니까?

nasanasas 2020. 11. 2. 08:04
반응형

iOS 애플리케이션이 백그라운드로 이동하면 긴 작업이 일시 중지됩니까?


예, 내 앱이 사용자의 멀티 태스킹 작업 (예 : 다른 앱으로 전환)에 반응하기를 원하는지 알고 있습니다.

- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application

내 앱이 시간이 많이 걸리는 작업 (예 : 큰 파일 다운로드)을 수행하고 사용자가 내 앱을 백그라운드로 전환하게하면 어떻게됩니까? 사용자가 내 앱으로 돌아 오면 해당 작업이 자동으로 일시 중지되고 재개 되나요?

내 앱이 백그라운드로 들어가거나 포 그라운드에서 다시 시작될 때 정확히 어떤 일이 발생합니까?

사용자가 내 앱을 백그라운드로 이동시킬 때 내 앱의 실행이 메서드 중간에있는 경우 어떻게 되나요?

예를 들어, 내 앱은

for (int i = 1 to 10000K) {
    do some calculation;
}

i == 500K이면 사용자가 다른 앱으로 전환합니다. 내 앱의 for 루프는 어떻게 되나요?


로부터 iOS 앱 프로그래밍 가이드 :

앱 델리게이트의 applicationDidEnterBackground:메서드는 작업을 완료하고 반환하는 데 약 5 초가 걸립니다. 실제로이 메서드는 가능한 한 빨리 반환되어야합니다. 시간이 만료되기 전에 메서드가 반환되지 않으면 앱이 종료되고 메모리에서 제거됩니다. 여전히 작업을 수행하는 데 더 많은 시간이 필요한 경우 beginBackgroundTaskWithExpirationHandler:메서드를 호출하여 백그라운드 실행 시간을 요청한 다음 보조 스레드에서 장기 실행 작업을 시작합니다. 백그라운드 작업 시작 여부에 관계없이 applicationDidEnterBackground:메서드는 5 초 이내에 종료되어야합니다.

위에서 설명한 장기 실행 작업이 기본 스레드에 있고 애플리케이션이 백그라운드로 이동 한 후 완료하는 데 5 초 이상 걸리면 애플리케이션이 종료됩니다. 메인 스레드가 차단되고 제 -applicationDidEnterBackground:시간 에 돌아올 기회가 없습니다 .

작업이 백그라운드 스레드에서 실행중인 경우 (실행하는 데 시간이 오래 걸리는 경우 실제로 실행되어야 함) 응용 프로그램이 반환되면 해당 스레드가 일시 중지 된 것처럼 보입니다 -applicationDidEnterBackground:( 이 답변 의 토론에 따라 ). 애플리케이션이 다시 포 그라운드로 돌아 오면 재개됩니다.

그러나 후자의 경우 백그라운드로 이동하는 동안 정리하여 백그라운드에있는 동안 언제든지 애플리케이션을 종료 할 수 있도록 준비해야합니다.


시간을 소비 할 수있는 작업을 수행하고 있고 종료하고 싶지 않은 경우 UIBackground Task i에서 실행하여 작업 시간을 연장 할 수 있습니다.

{
    UIBackgroundTaskIdentifier  taskId = 0;
    taskId = [application beginBackgroundTaskWithExpirationHandler:^{
        taskId = UIBackgroundTaskInvalid;
    }];

// Execute long process. This process will have 10 mins even if your app goes in background mode.

}

"handler"라는 블록 인수는 백그라운드 작업이 만료 될 때 (10 분) 발생합니다. 다음은 문서에 대한 링크입니다.


위에서 언급했듯이 앱이 백그라운드에서 실행되고 수행중인 작업에 따라 Apple이 허용하거나 거부 할 수있는 몇 가지 경우가 있습니다.

https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

더 중요한 것은 이러한 범주 중 하나에 해당하는 경우 앱 새로 고침 빈도는 해당 장치에서 다른 앱과 비교하여 앱 사용을 고려하는 사과 알고리즘에 의해 결정됩니다. 앱이 더 자주 사용되면 더 많은 백그라운드 시간이 할당됩니다. 이것은 하나의 변수 일 뿐이지 만 백그라운드 시간 할당은 앱마다 다르며 제어 할 수 없다는 생각을 갖게됩니다.

참고 URL : https://stackoverflow.com/questions/6650717/when-an-ios-application-goes-to-the-background-are-lengthy-tasks-paused

반응형