*目次 [#o40c0626]
#contents


*バックグラウンドで処理を実行し続けることができるのは3種類だけ [#e38577eb]
マルチタスク対応といっても、バックグラウンドでなんでもかんでも実行できるわけではなく、ドキュメントにもあるとおり、バックグラウンドで処理を実行し続けることができるのは 音楽再生(audio)、位置情報取得(location)、VoIP この3種類だけです。

**情報源 [#o87513b1]
http://blog.mudaimemo.com/2011/01/ios.html

**内容に関わらず特定のタスクが完了するまでシステムに一定の猶予の時間(最大10分程度)を与えてもらう [#i9a8a7de]

実行したいコードを UIApplication の

beginBackgroundTaskWithExpirationHandler:
endBackgroundTask:

というメソッドでくるんであげるだけ

***例 [#n87a8cc2]
 // UIBackgroundTaskIdentifier型の bgTask というプロパティが宣言されているとして
 
 - (void)upload {
    UIApplication  *app = [UIApplication sharedApplication];
 
    // ここから「アプリがバックグラウンドに入っても実行し続けたい処理」が始まると通知
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        // このブロック内は一定時間内 (10分程度)に処理が完了しなかった場合に実行される。
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];
 
    // アップロード処理を適当に書く
    // アップロード中にアプリがバックグラウンドに入ってもアップロードは継続
 }
 
 
 // アップロード完了後に呼ばれるdelegateメソッド
 
 - (void)uploadFinished {
    // 「アプリがバックグラウンドに入っても実行し続けたい処理」が終わったと通知
    [[UIApplication sharedApplication] endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
 }

**ドキュメント [#yce732cd]
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html

*iOSアプリのバックグラウンド移行時にクラスごとに処理を分ける [#h59a0983]
http://d.akiroom.com/2012-01/ios-background-class-navigationcontroller/#more-255

*[iOS] バックグラウンド実行見本(Task Completion) [#s1d423ae]
http://cocoadays.blogspot.jp/2011/04/ios-task-completion.html

Task Completion は、iOS4 から導入されたマルチタスキングの機能の一つで、これを利用すると最大10分間を上限にバックグラウンドで処理を実行できる。

*マルチタスク化したiOS [#y2c96734]
http://thinkit.co.jp/story/2011/01/14/1961?page=0,2

*NSOperation 非並列実行モードと並列実行モードの使い分け [#eee7e41d]
http://d.hatena.ne.jp/glass-_-onion/20110706/1309909082


*バックグラウンドで定期実行 [#d7f89f3d]
http://blog.rspepe.com/288


*常時接続サンプル [#q8091ae2]

**iPhoneとsocket.ioサーバを常時接続させる1 [#re2e006c]
http://growthfield.hatenablog.jp/entry/2012/01/29/060746

voipとして審査にとおるかどうかはべつとして、実機で常時接続する方法

**iPhoneとsocket.ioサーバを常時接続させる2 [#f6e87a07]
http://growthfield.hatenablog.jp/entry/2012/01/30/060135
電波が途切れても再接続する方法

**バックグランドタスク宣言による10分間の延命要求が10分毎に発行されるので結果的にRunLoopは永続的に有効になる方法 [#q1588683]
http://growthfield.hatenablog.jp/entry/2012/01/31/063748

**iPhoneの位置情報をsocket.ioでリアルタイムにGoogle Mapに表示する [#v2ddb10e]
http://growthfield.hatenablog.jp/entry/2012/02/28/082834

*iOS Application Programming Guide」の「Executing Code in the Background」 [#p0170b99]
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html


*その他 [#h939651b]

**iPhoneアプリをRubyOnRailsでつくる関連 [#q18bf2c6]
http://www.killerstartups.com/mobile/iphoneonrails-com-your-iphone-working-better/

**Xcode4でのiOS Frameworkの作り方 [#nb96e347]
http://d.akiroom.com/2011-11/xcode4-ios-framework/#more-175
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS