iOS4以降ではマルチタスキングを利用してバックグラウンドへ移行した
iPhoneアプリで処理を続けたり定期的に実行させることができます。
よくあるのは定期的にサーバへデータを取りに行ったりする機能です。
この機能の実現には知らないと分からないことがあるのでメモついでに紹介します。
まず、Info.plist内のプロパティを編集します。
アプリケーションのInfo.plistファイルにUIBackgroundModesキーを追加します。
このキーの値を、voipという文字列を含む配列に設定します。
こんな感じです。
定期的に実行するObjective-Cコードを書いていきます。
ここでは、iPhoneアプリがバックグラウンドへ移行する際に設定します。
- (void)applicationDidEnterBackground:(UIApplication *)application { [[UIApplication sharedApplication] setKeepAliveTimeout:600.0 handler:^{[self checkServer];}]; }
そして、呼び出し先の関数を書きこめばおしまいです。
- (void) checkServer{ NSURL *url = [NSURL URLWithString:@"http://localhost/check.xml"]; NSString* check_xml = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; }
このコードの動作はバックグラウンドで移行すると10分ごとに
checkServerを呼び出しデータを取りに行く動作となります。
ちなみにインターバル時間を10分未満にすると
KeepAliveTimeout must be > 600 seconds
と怒られますので600秒(10分)以上で設定してください。
ただ、このままではiPhoneアプリをフォアグラウンドにした時も
実行され続けるので気をつけてください。
また、iPhoneアプリをリリースする際にUIBackgroundModesで選択したモードの機能が無い場合
審査が通らない可能性がありますので注意が必要です。
金子 says:
iphone 定期実行でググったら一番上に
このページが出たよ。
おめでとう!
2012/06/21 at 12:22 pm