на iOS 7+, как да принудите операция за изтегляне да се изпълнява от системата, а не от приложението?

Искам да тествам фоново изтегляне на големи файлове в приложения за iOS 7+.

Използвам NSURLSession с фонова конфигурация, както е обяснено в Документация на Apple за фоново изпълнение.

В документацията се посочва, че „Веднъж конфигуриран, вашият обект NSURLSession безпроблемно предава задачите за качване и изтегляне на системата в подходящи моменти.“

Опитвам се да създам такива подходящи времена, за да мога да тествам приложение преди пускане. Различни примери предполагат, че мога просто да изведа различно приложение на преден план, за да задействам предаването на задачата за фоново изтегляне към системата.

Това обаче не се оказва така. Вместо това изтеглянето завършва под контрола на приложението.

Важно

- (void)application:(UIApplication *)application
handleEventsForBackgroundURLSession:(NSString *)identifier
  completionHandler:(void (^)(void))completionHandler

никога не се изпълнява в моя делегат на приложение.

Опитах се да наложа предаване както на iOS симулатора, така и на действителни устройства, но без успех.

Мисли за начини за принудително предаване на фонови изтегляния към системата ще бъдат оценени.


person Geoff S    schedule 15.06.2016    source източник


Отговори (1)


Няма "предаване". Всяка задача във фонова сесия винаги се изпълнява в отделен процес, точка.

Методът application:handleEventsForBackgroundURLSession:completionHandler: обаче се изпълнява само ако приложението ви бъде прекратено от операционната система (не от потребителя), докато тече изтегляне. Ако това се случи, приложението ви се стартира отново на заден план, когато изтеглянето приключи.

Потенциално можете да тествате това, като започнете голямо изтегляне във фонов режим, което ще отнеме достатъчно време, за да завърши, че приложението ви да бъде изгонено... или като превключите към друго приложение, което използва RAM, докато приложението ви бъде изгонено.

person dgatwood    schedule 25.07.2016