1

バックグラウンドスレッドを使用して4時間ごとにコマンドを実行する方法を理解しようとしています。

私はこれまでこのようなものを作成したことがないので、これまで読んだだけです。私が読んだものの1つはこれです

「スレッドは物理メモリと重要なシステムリソースを拘束します」

したがって、その場合、時間をチェックしてからメソッドを実行するこのスレッドを使用するのは悪い考えです...またはより良いオプションがありますか?GCD(Grand Central Dispatch)について読んだことがありますが、これが同時リクエストの方が多いと思うので、適用できますか?時間をチェックすることを何度も繰り返すものではありません。

または最後に、4時間ごとにリクエストを実行できる、私が完全に見逃しているものはありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

2

バックグラウンドプロセスの実行が許可される最大時間(10分)があり、アプローチが困難になります。次善の策は、次のイベントを計算して、時間をどこかで節約することです。その後、アプリがそのイベント以降に実行された場合、アプリは必要なアクションを実行できます。

これは役立つかもしれません: http ://www.audacious-software.com/2011/01/ios-background-processing-limits/

于 2012-11-20T02:36:32.037 に答える
1

タイムスタンプを利用して、今から何時間も時間が経過したときに通知を出すのもいいと思います。

マルチスレッドは、これを行うための適切な手段ではありません。これは、基本的に、クロックサイクルを消費して4時間ループを実行するためです。オペレーティングシステムの魔法のおかげで、これはコア全体やそのようなばかげたものを消費することはありませんが、実行が許可されている場合は継続的に計算されます。これは膨大なリソースの浪費になるため、許可されていません。GCDは実際にはこの種のことを意図したものではありませんでした。これは、同時実行によってUIの相互作用をスムーズにし、タスクをより効率的に完了することを目的としていました。4時間のループは非効率的です。並行性は、コンテンツのロードまたは変更中にテーブルを操作できるようなツールと考えてください。GCDブロックを正しく使用すると、これが非常に簡単になります。GCDおよびその他のマルチスレッド機能は、バックグラウンドで計算を実行したり、データベースと対話したり、ユーザーエクスペリエンスに影響を与えることなく要求を処理したりするためのツールを提供します。私よりはるかに賢い多くの人々は、マルチスレッド/マルチタスクとは何か、そしてそれが何に役立つのかについて広範囲に書いています。ある意味で、メッセージをしばらく投稿することは、GCDを介してブロックを絶えず実行して4時間待機するという煩わしさを伴わないマルチタスクの方法ですが、これを行うことは可能です。スレッドの存続期間の最大長よりも短い時間を監視したブロックを実行し、スレッドの実行がオーバーディスパッチされたときに、目的の時間が達成されるまでブロックを再度ディスパッチできます。これはこれを行うには悪い方法です。通知センターに通知を投稿し、

時間の変更を監視する通知リクエストを投稿すると、メモが返されますが、これには、アプリケーションがアクティブであるか、バックグラウンドで動作している必要があります。OSがアプリケーションを強制終了しないことを保証することはできませんが、「バックグラウンド」状態のメモリフットプリントが小さく、快適で静かな場合、通知センターの要求はアクティブなままで、意図したとおりに機能します。

于 2012-11-20T02:58:04.450 に答える