Это пример с сайта developer.apple.com.
Задачи конечной продолжительности
Запуск фоновой задачи во время выхода
- (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;
});
}
Я хочу реализовать Длительную задачу, а не "Конечную длину". Я не нашел ни одного примера, написанного с Objective-C для текущей версии SDK. Могу ли я запустить его, скажем, при запуске приложения и запускать его постоянно, независимо от того, находится ли приложение на переднем плане или в фоновом режиме? Как я могу это сделать?
Я разработчик, ориентированный на реакцию, и я только начал изучать Objective-C. Поэтому мне может понадобиться простой пример для подражания. Я уже реализовал экземпляр моста для Cocoa Touch Class
, он отлично работает. Все, что мне нужно, это запустить Long-Running Task в этом классе. Мне это нужно для BLE, но для простоты я бы сказал, давайте использовать отслеживание местоположения, так как его проще и быстрее проверить.
Моя LongRunningTask.m:
#import "LongRunningTask.h"
@implementation LongRunningTask
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(start:(RCTResponseSenderBlock)callback)
{
// start the Long-Running Task here
callback(@[@"done"]);
}
Я не понимаю, как определяется долговременная задача? Кажется, что нет определенного метода или какого-либо маркера, который бы объявил задачу долго выполняющейся. Итак, технически, если я получаю разрешение от пользователя на запуск долговременной задачи определенного типа, я могу непрерывно запускать любой код, который захочу, в пределах applicationDidEnterBackground
? Даже если это не имеет ничего общего с моим разрешением?
И единственный фактор, влияющий на то, будет ли эта задача завершена через 10 минут, — это есть у меня разрешение или нет?
Спасибо!