1

CoreLocationを使用してユーザーの位置を常に追跡しようとしています(エンタープライズアプリなので、ユーザーエクスペリエンスとバッテリー使用量は問題になりません)。

アプリがバックグラウンドにあるときに、startUpdatingLocationを指定したCLLocationと、バックグラウンドタスク用のInfo.plistの「location」キーを使用すると、良好な結果が得られます。

ただし、テストでは、数時間後にアプリが終了し、更新の取得が停止したようです。

applicationWillTerminateでstartMonitoringSignificantLocationChangesを呼び出してみましたが、アプリが終了している間も機能することを期待していますが、機能していないようです。

基本的に、アプリがstartUpdatingLocationの更新を常に受信し続け、バックグラウンドで強制終了されないようにする方法が必要です。

4

3 に答える 3

0

私はあなたの必要条件と同じアプリケーションを開発しています。私は機器とメモリモニターモジュールを使っていくつかのテストを行いましたが、実際にはあなたのように長い目で見たわけではありません(アプリを30分間だけテストしました)が、一時停止せずに定期的にバックグラウンドモードになっていることに気付きました。UIBackgroundModeが「location」または他の許可された値の1つに設定されている場合、およびstartUpdatingLocationが呼び出されている場合にのみ、中断されないことに注意してください。

OSは通常、最も最近使用されていない順序で一時停止状態のアプリケーションを自動的に閉じますが、この種の構成のため、アプリを閉じないでください。OSによって閉じられるようにイメージできる唯一の理由は、OSが非常に低いメモリ状態にあり、メモリを解放する他の可能性がない場合、またはもちろんアプリがクラッシュした場合です。こちらの私の投稿をご覧ください。あなたの質問は4か月前になりましたが、問題は見つかりましたか?

于 2012-10-03T12:17:54.033 に答える
0

簡単に言うと、メモリが必要で、アプリがバックグラウンドにある場合にiOSがアプリを終了するのを防ぐ方法はありません。

そうは言っても、あなたはあなたのアプリが本当に殺されていると確信していますか?アプリがバックグラウンドにあるときの位置情報の動作に関する過去のスレッドは、主にアプリが停止しない理由(または、少なくとも、開発者が位置情報サービスの更新を停止したと考えるポイントを超えて継続する理由)に集中しています。個人的には、個々のアプリがバックグラウンドで強制終了されるケースはあまり見たことがないので、あなたのアプリが非常に確実に死んでいることに少し驚いています。アプリのメモリリークをチェックしましたか?あなたは自分自身を記憶から漏らしているのだろうか。

于 2012-06-14T21:42:29.423 に答える
0

次の呼び出しで、場所の大幅な変更を登録する必要がありますstartMonitoringSignificantLocationChanges。ドキュメントに記載されているように、「このサービスを実行したままにして、アプリケーションが後で一時停止または終了した場合、新しい位置データが到着すると、サービスは自動的にアプリケーションをウェイクアップします。」
バックグラウンドでコードを実行するだけで十分な場合は、regionChangeMonitoringに登録します。再びドキュメントから:「アプリケーションが実行されていないときを含め、アプリケーションに関連付けられたリージョンは常に追跡されます。アプリケーションが実行されていないときにリージョンの境界を越えると、そのアプリケーションはイベントを処理するためにバックグラウンドで再起動されます。 「」

于 2012-06-17T02:33:03.937 に答える