2015-03-26 2 views
0

Я хочу обновить свое приложение в фоновом режиме, поэтому я добавил требуемые фоновые режимы «fetch» ​​в свой info.plist. В моей FinishedLaunching я добавил:iOS: UIBackgroundFetch - PerformFetch не называется

UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval (UIApplication.BackgroundFetchIntervalMinimum); 

И перезапись метод PerformFetch:

public override void PerformFetch (UIApplication application, Action<UIBackgroundFetchResult> completionHandler) 
{ 
    Console.WriteLine ("PerformFetch called..."); 

//Return no new data by default 
var result = UIBackgroundFetchResult.NoData; 
... 

completionHandler (result); 
} 

Но метод никогда не дозвонились ... :(

В чем проблема, я не могу Найти все ошибки? Спасибо за помощь.

ответ

4

К сожалению, система решает сам вызов этого обработчика, это непредсказуемое событие. И вы никогда не определяете определенное время исполнения. В последнее время я исследовал его и действительно расстроился. Раннее, симулятор позволяет имитировать вызов напрямую.

+0

Вы пытались добавить точку останова и пройти через нее? – Adrian

+0

Да, все было хорошо, я мог поймать событие, но я не мог определить точное время, обработчик иногда случается. – kokos8998

+0

Если вы можете «поймать» событие с точкой останова, попробуйте ввести 'bt' из приглашения' LLDB'. Это backtrace, которая покажет вам, что произошло непосредственно перед точкой останова. Это может дать вам несколько цветов: где ваша проблема живет. – Adrian

2

На устройстве iOS этот метод непредсказуемо называется ОС. Есть много факторов, которые влияют на частоту вызова этого метода, в том числе на то, как вы настроили интервал и сколько времени обычно занимает ваше приложение для выполнения фоновых настроек. Если вы обычно занимаете много времени для выполнения выборки, ОС будет вызывать этот метод реже. Смотрите раздел «Получение небольших количеств Содержание оппортунистически» здесь:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

и ссылки API здесь:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:performFetchWithCompletionHandler:

Если вы тестируете приложение в симуляторе, вы можете имитировать фоновый выбор из меню Xamarin Studio с помощью Run -> Simulate iOS Background Fetch. Если вам необходимо инициировать загрузки надежно на основе какого-либо внешнего события, рассмотрите возможность использования push-уведомлений с установленным флагом «content-available». См. Раздел «Использование Push Notifications для начала загрузки» из первой ссылки.

Смежные вопросы