2

車で移動しているユーザーの位置を常に追跡する必要がある一種のGPSナビゲーションアプリケーションを開発する必要があります。具体的には、現在地を地図上に表示する必要はありませんが、総移動距離を計算するために、可能な限り最高の精度でその位置を記録するだけです。

もちろん、ユーザーが別のアプリに切り替えたり、電話がかかってきたりした場合、アプリケーションはバックグラウンドで作業を継続する必要があります…</ p>

私が行ったテストと、この便利な投稿(およびドキュメント)から学んだことから、この場合の最良の選択は、 UIBackgroundModes =locationinで構成されたアプリケーションを使用した標準の位置情報サービスであるように思われます。 .plistファイル。このようにして、バックグラウンドであってもロケーションの更新を受信し続け、OSによって一時停止されることはありません(これは、[locationManager startUpdatingLocation]が呼び出された場合にのみ実際に当てはまります)。これもこの人によって確認されています。私は、Instrumentsとメモリモニターモジュールを使用してアプリを実行し、アプリの状態に関するさまざまなフラグを確認し、UIBackgroundModesをlocationに設定してstartUpdatingLocationをアクティブにしてから、アプリをバックグラウンドで実行するだけで、それが正しいことを個人的に確認しました。 。

  • 1)位置を追跡しているときにアプリが終了したときにどうすればよいか疑問に思っています。場所の更新を失いたくないので、新しい更新が利用可能になるたびに再度ウェイクアップする必要があります。ドキュメントには次のように書かれています。

重要:アプリが現在一時停止されている場合、applicationWillTerminate:メソッドは呼び出されません。

しかし、私の場合は一時停止されないため(バックグラウンドにとどまりますが、一時停止されません)、論理的な結論として、applicationWillTerminateは常に呼び出され、このメソッド内で重要な位置情報の更新またはリージョンの監視を順番に登録できます。ウェイクアップしてから、標準位置情報サービスを再起動します。 applicationWillTerminateは、このコードを配置するのに適切な場所ですか?

  • 2)バックグラウンドで動作しているが一時停止されていないアプリケーションは、メモリ不足の状態以外の理由でOSによって終了される可能性がありますか、または私のアプリがメモリ警告に適切に応答しませんか?(ユーザーは手動で閉じることもできます)。applicationWillTerminateがなんらかの方法で呼び出されないのではないかと心配していました。

  • 3)Appleは、バッテリーの消耗が早いため、バックグラウンドで標準の位置情報サービスを常に使用するアプリを承認できませんでしたか?同様のアプリで問題を承認したことがありますか?

4

1 に答える 1

0

あなたはここですべきではない多くの質問をしているので、私はその一部だけをあなたに伝えます.

アプリが終了すると、再起動できなくなります。これは通常、ユーザーがアプリを終了した場合です。
Apple (ios) がアプリを終了しないことを心配しないでください。アプリは多くのメモリを使用せず、巨大なビットマップ グラフィックスを使用するゲームは終了する可能性が高くなります。

  1. すべてのGPSアプリはバットを排出します。それは承認しない理由にはなりません。

  2. サスペンドとは、アプリがバックグラウンド モードではなく、スリープ状態であることを意味します。Gps を受信しないため、終了時に電話する必要はありません。前にデータを保存する必要があります。バックグラウンド モードとアプリのライフ サイクルに関する Apple ドキュメントを参照してください。

于 2012-12-14T02:49:50.883 に答える