2016-04-29 57 views
0

バックグラウンドでタイマーを残すためにbeginBackgroundTaskWithExpirationHandlerをスタッキングするコードを評価しています。かなり賢いアイデアだとは認めていますが、これがベストプラクティスかどうかは分かりません。beginBackgroundTaskWithExpirationHandlerを繰り返し呼び出す

ので流れ:それは返す場合

  1. コールbeginBackgroundTaskWithExpirationHandlerコールバックハンドラ
  2. とは、何かをし、その後、
  3. 再びリンスを呼び出し、繰り返し、道
沿っTaskInvalidをチェックします

私は、180秒が最大時間だと知っていますが、場合によってはこれを短くすることもできます。

質問:

1:これは法的ですか?

2:アプリに3分以上のバックグラウンドを与えて、1時間ほどのバックグラウンドでプロセスを残しても問題ないと思いますか?

3:これを考慮するか?

ありがとうございます!

+2

実際にXcodeに接続されていない実際のデバイスで試しましたか?私はこの "トリック"があなたにバックグラウンドで180秒以上を与えるだろうとは思わない。 – rmaddy

答えて

0

アップルはアプリを3分以上何度も何度もバックグラウンドで使っても問題ないと思うだろうか?

いいえ、あなたがそれを行うことができても、アップルはそれでOKではありません。彼らは、ユーザの知識なしにバックグラウンドでアプリを稼働させたり、CPUサイクルを消費したり、メモリを消費したり、バッテリを消耗させたりすることを防ぐために、3分の制限を指定しました。 (実際には「有限のタスク」の制限は5分であったが、数年前にはさらに3分に制限されていた。)すべてのアプリ開発者がこの3分間の制限を日常的に迂回していた世界を想像してみると、電池が素早く排水され、フォアグラウンドアプリの応答性が低下し、操作するメモリが少なくなります。

Appleは、バックグラウンド(VOIP、ナビゲーションアプリ、音楽アプリ、ブルートゥース操作など)で動作し続けることが許容される非常に狭い操作を特定しています。バッテリと性能への影響。

いくつかの限られたバックグラウンド機能を使用するタスクのクラスもあります(例えば、有限長のタスクを完了するための時間の要求、日々の定期的なバックグラウンドフェッチ、重要な変更ロケーションサービス、プッシュまたはローカルに応答する機会通知など)。その目的は、バッテリの影響を最小限に抑えながら、バックグラウンド機能の間で意味のあるバランスを取ることです。

要するに、アップルは、無差別なバックグラウンド操作の使用を嫌う/ curtails。 App Store Guidelinesでは、彼らは明示的に

2.16マルチタスクのアプリのみをその意図された目的のためにバックグラウンドサービスを使用することが言う:などのVoIP、オーディオ再生、場所、タスク完了、ローカル通知、

...背景の位置情報サービスを使用して

4.5のアプリは、あなたが正確にあなたがこれを必要とするものを記述した場合

は、このすべてを言ってヒューマンインターフェイスガイドラインで説明したメカニズムを使用して、利用目的を明確に理由を提供しなければなりませんバックグラウンド操作では、Appleが提供するさまざまなバックグラウンド機能のうち、どれが目的の効果を達成するために使用できるかを記述することができます。これらのインターフェイスはすべて、特定の問題を解決するために設計されており、デバイス上の希少なリソースと機能のバランスを保ちます。しかし、それが「ちょっと、私は5分ごとに私のサーバーにpingしたい」のようなものならば、いいえ、Appleはそれを嫌うだろう。

詳細については、iOS向けアプリケーションプログラミングガイドのBackground Executionの章で詳しく説明しています。

関連する問題