我正在开发一个需要定期(经常)在后台做一些工作的应用程序,即使应用程序本身没有显示。我已经启动它,甚至在 10 分钟(600 秒)后通过将其声明为 VOIP 应用程序自动重启。该应用程序不适用于 App Store。
大约 300-400 秒后,系统会生成一个新线程(正确),但不会关闭最后一个线程。这意味着大约每 600 秒产生一个新线程,从而增加了我的应用程序的内存和电池消耗。不好。
那么,一旦创建了新线程,关于如何关闭第一个衍生线程的任何线索?
一旦应用程序关闭,此代码将启动后台处理程序。它还定期以 600 秒的间隔启动一个新的处理程序
- (void)applicationDidEnterBackground:(UIApplication *)application
{
isInBackground = YES;
BOOL backgroundAccepted = [[UIApplication sharedApplication]
setKeepAliveTimeout:600 handler:^{ [self startBackgroundHandler]; }];
if (backgroundAccepted)
{
NSLog(@"VOIP backgrounding accepted");
}
[self startBackgroundHandler];
}
此代码启动一个线程,该线程定期执行一些工作(每 5 秒):
- (void)startBackgroundHandler
{
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while (1)
{
NSLog(@"BGTime left: %f", [UIApplication
sharedApplication].backgroundTimeRemaining);
sleep(5);
}
});
}