2016-03-18 6 views
1

Я также размещение notification от applicationDidEnterBackground назвать save method так, когда, если пользователь не нажать на кнопку Сохранить и попал в Гат данных iPhone home button пользователя сохраняется.Нужна помощь в отношении исполнения фона iOS

Точно так же как Apple, Doc предлагает

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ 
     // Clean up any unfinished task business by marking where you 
     // stopped or ending the task outright. 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    // Start the long-running task and return immediately. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     // Do the work associated with the task, preferably in chunks. 

     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }); 
} 

Вопрос 1: Моя задача не так долго это займет несколько секунд, чтобы сэкономить несколько сотен строк в DB, это еще нужно положить внутрь dispatch_async?

Вопрос 2: Пользователь может нажать кнопку Сохранить и сразу же нажать кнопку домой iPhone в этом случае моей экономии метод будет вызываться дважды, и это будет плохо для моего приложения, я должен использовать dispatch_once или есть другие путь?

Вопрос 3 Apple, Док говорит:

Отказ назвать endBackgroundTask: метод для фоновой задачи приведет к прекращению вашего приложения. Если при запуске задачи вы предоставили обработчик вылета , система вызывает этот обработчик и дает вам последний шанс завершить задачу и избежать завершения .

  1. Если мое приложение работает и endBackgroundTask: не называются разобьет IOS приложения?
  2. Что означает avoid termination, если мое приложение находится в фоновом режиме, и моя задача также закончена, все же iOS сохранит мое приложение в живых и предотвратит его завершение?

Вопрос 4 Как долго мое приложение будет оставаться функциональным после перехода в фоновом режиме во время использования этого backgroudtask? потому что компания Apple уже в комментариях // Start the long-running task and return immediately.

ответ

2

Вопрос 1

Если операция занимает менее 5 секунд (в соответствии с Documentation), вы можете сделать это без beginBackgroundTaskWithName и dispatch_async, но вы должны учитывать, если эти данные со временем увеличится, если это так, тогда вам лучше делать это с beginBackgroundTaskWithName и dispatch_async.

Вопрос 2

Что я хотел бы сделать, это сохранить флаг в NSUserDefaults о операции сохранения, поэтому в случае, если операция сохранения еще продолжается, вы можете избежать, пытаясь сохранить его снова.

Вопрос 3

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

2.- Обычно, когда пользователь покидает приложение, ваше приложение может время от времени выполнять некоторые операции в фоновом режиме или в ответ на push-уведомление, если этот режим включен. Но если ваше приложение завершается пользователем или операционной системой, то вы не сможете

Вопрос 4

К сожалению, нет никаких указаний об этом в документации, но вы можете быть уверены, что это больше чем 5 секунд, если вы используете beginBackgroundTaskWithName.

Надеюсь, что это устраняет любые сомнения.

Приветствия

----- EDIT 1 -----

Как заявил @ Paulw11, для Вопрос 4, «это в настоящее время 3 минуты, и вы можете изучить Свойство UIApplication backgroundTimeRemaining, чтобы определить, сколько времени осталось ».

+0

На вопрос 4 есть ответ о том, как долго может выполняться задача; в настоящее время 3 минуты, и вы можете проверить свойство UIApplication 'backgroundTimeRemaining', чтобы определить, сколько осталось времени. Правда, однако, как долго ваше приложение будет оставаться без дела в фоновом режиме (так, что нажатие на иконку восстанавливает его, а не запускает новую копию) неизвестно, потому что это зависит от того, что еще делает пользователь на устройстве, доступной памяти и так далее – Paulw11

+0

Спасибо Paulw11, я отредактирую ответ –

+0

@GianniCarlo Большое вам спасибо за подробный ответ. Пожалуйста, скажите мне еще одну вещь, если пользователь дважды коснется кнопки дома и прекратит приложение, будет baskgroundtask все еще работать одинаково , –

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