バックグラウンドで計算を実行する必要があります。これは正しい方法ですか?
重要onPerformBackgroundTaskを参照してください。メソッドの最初の部分は、バックグラウンドタスクで終了します。アプリが一時停止される前にメソッドの2番目の部分を呼び出すことは可能ですか?
- (void)applicationDidEnterBackground:(UIApplication *)application {
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
if ([self isNeedTimeToFinishTask])
{
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
if (!backgroundTimer)
{
self.backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:540 target:self selector:@selector(onPerformBackgroundTask:) userInfo:nil repeats:YES];
}
}
-(void) onPerformBackgroundTask:(id) sender
{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
if ([self isNeedTimeToFinishTask])
{
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
}
}
-(void) endBackgroundTask
{
if ([backgroundTimer isValid])
{
[backgroundTimer invalidate];
[backgroundTimer release];
}
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}