バックグラウンドで継続して処理を実行する
フォアグランドでダウンロードなどの処理をおこなっている最中に、バックグラウンドに回ってしまうと、通常は処理が中断してしまう。中断しないようにするにはどうすればいいか?
10分程度、処理の継続を許可してもらうような趣旨の実装。
@implementation ViewController { UIBackgroundTaskIdentifier bgid; } /********************************************************* ロード後 *********************************************************/ - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. /*-------------------------------------------- AppDelegeteに通知されるイベントを、 このオブジェクトでも通知を受信するように追加する ダウンロード中にバッググラウンドに移行すると処理が止まってしまう。 これを防ぐ為にバッグに移行したとき、バッグから復帰した時の処理を追加する *--------------------------------------------*/ [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(willResignActive:) name:UIApplicationWillResignActiveNotification object:nil]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(didBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; } /********************************************************* アプリケーションがフォアグランドからバッググラウンドになる直前 *********************************************************/ - (void)willResignActive:(NSNotification *)notification { NSLog(@"resign"); UIApplication *app = UIApplication.sharedApplication; bgid = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgid]; bgid = UIBackgroundTaskInvalid; }]; } /********************************************************* アプリケーションがバッググラウンドからフォアグランドに復帰した直後 *********************************************************/ - (void)didBecomeActive:(NSNotification *)notification { NSLog(@"become"); [UIApplication.sharedApplication endBackgroundTask:bgid]; }
willResignActive、didBecomeActive の処理を、AppDelegate.m上で実装すれば、全てのView上の処理が、バックグランドに回っても中断されないようになるのかなぁ...?
参考
[Objective-C] バックグラウンドで継続して処理を実行する - Qiita