【发布时间】:2017-03-07 07:39:13
【问题描述】:
这是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 编写的示例。我可以在应用程序启动时启动它并连续运行它,无论应用程序是在前台还是后台?我怎么做?
我是一名 react-native 开发人员,我刚刚开始学习 Objective-c。因此,我可能只需要简单的示例即可。我已经为Cocoa Touch Class 实现了桥接实例,它工作正常。我只需要在这个类中启动长时间运行的任务。我需要它用于 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 分钟内终止的唯一因素是我是否获得了许可?
谢谢!
【问题讨论】:
标签: ios objective-c long-running-processes