2012-12-14 10 views
5


を実行すると、私はbeginBackgroundTaskWithExpirationHandler()下でそれを入れているし、それによって、同じのための10分を割り当てられる必要があります。しかし、私はその前にアプリが中断されていると思う。私が実行しているタスクはメモリとCPU集約型なので、OSがアプリケーションを中断状態にしている可能性はありますか?
もしそうなら、これらの制限をバイパスする方法はありますか? (私はプライベートAPIを使用することにオープンしています)。ここでアプリがバックグラウンド状態に入ったとき、私はいくつかの処理をしていた有限長のバックグラウンドタスク

は、バックグラウンドタスクを開始するためのコードです:

if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]){ 

     if([[UIDevice currentDevice] isMultitaskingSupported]){ 
      __block UIBackgroundTaskIdentifier bgTask; 
      UIApplication *application = [UIApplication sharedApplication]; 
      bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 

        [application endBackgroundTask:bgTask]; 
        bgTask = UIBackgroundTaskInvalid; 
      }]; 

      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
       [self captureImage]; 
       [application endBackgroundTask:bgTask]; 
       bgTask = UIBackgroundTaskInvalid; 
      }); 
     } 
    } 
+0

バックグラウンドタスクの開始に使用するコードを表示できますか? – Nate

+2

どうしたの?これは本当の質問ではない? – Nate

答えて

2

をあなたのアプリケーションを実行するために、IOSを強制する方法はありません。

この部分、私は彼に同意:

the os may kill you at any time when its pressured. 

言葉は非常に曖昧である "圧迫" が。正当に多くの時間をリクエストしたアプリを中断するには、多くのプレッシャー(例としてメモリ不足)があるはずだと思います。一方で、それは本当のシナリオケースです。一方で、これほど頻繁に起こっていない(iOSデバイスには今やかなりのメモリがある)。このメソッドを呼び出すたびにでバランスをとらなければならない

:ドキュメント(http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html)から

endBackgroundTask: メソッドと一致する呼び出し。バックグラウンドタスクを実行しているアプリケーションには、実行時間が限られています。 ()backgroundTimeRemainingプロパティを使用すると、使用可能な時間がわかります。)各タスクのendBackgroundTask:を時間切れにする前に呼び出さないと、システムはアプリケーションを強制終了します。 handlerパラメータにブロックオブジェクトを指定すると、システムは、タスクが終了する機会を与えるために、時間が切れる前にハンドラを呼び出します。

私が推薦する:

  • が完了ハンドラ内でいくつかのログを追加

、アプリが中断してしまった場合は審査システムのコンソールログ(backgroundTimeremaining含む)ロジックとログにログを追加します。 。

P.S.私はpublic APIなので、iphone-privateapiタグを削除しました。

+0

ありがとうございます。私はbackgroundTimeRemainingプロパティを使用していましたが、残っている時間を監視するだけで、0に突然減少しました。 –

+0

それは面白いです。システムコンソールでこれを疑うものは何か見たことがありますか(私はこのようなケースは見たことがない)。 –

1

OSはそのプレッシャーをいつでもあなたを殺すことがあります。 10分間の保証はありません。 (あなたが振る舞うならば、あなたもはるかに長く実行することができます:D)

私はDaij-ダンが完全に右であることを確認していない私の知る限り

関連する問題