0

私のアプリではServiceがあり、位置の更新を受け取り、データベースに保存します。私はFragmentも持っていて、データベースからすべての記録されたウェイポイントのMapViewPolyLineを表示しています。GPS読み取りからPolyLineトラックを更新するためのより良い方法

録画中に、は、新しいウェイポイントについて、FragmentPolyLineを更新できるように通知します。問題は、ユーザーがアプリから離れてアプリをナビゲートすると、は、Fragmentが一時停止してからFragmentが更新されないことになります。だからonResume私は新しいPolyLineを作成し、データベースのすべてのウェイポイントを読んで、データベースに追加します。

これはすべて問題なく動作しますが、実際にはパフォーマンスの観点からは新しいPolyLineを作成し、すべてのウェイポイント(数千もあるかもしれません)を再作成するのに最適です。私はすでにPolyLineに入っていない新しいウェイポイントをもう一度追加することができたと思いますが、ここに誰かが別の解決方法を持っているかどうかを見たいと思っていましたか? Fragmentを「生きている」状態に保ち、アプリケーションがバックグラウンドになっていても(サービスが実行されている限り)、PolyLineを更新する方法はありますか?それとももっと良い方法がありますか?ポリラインを再作成

答えて

2

はおそらく不可避であるが、ここではパフォーマンスが問題になる場合は、あなたがやって考えなければならないいくつかのものです:

は、時間制限を置きます。ポリラインを再作成する場合は、最後の1時間または1日にデータを取得するだけです(ここでは最良の値を決定できます)。その期間を延長するオプションを提供します。これにより、データの読み込みに時間がかかること、およびアプリケーションがより多くのリソースを使用することをユーザーがより理解できるようになります。

を保存しながらデータを集計します。これにより、データベース内のポイントを保存するためのディスク容量が削減されます(ローエンドのデバイスでは非常に重要です)。アクティビティの再構築時にパフォーマンスが向上します。

  1. 2点を確認し、直線かどうかを確認します。その場合は、中央のものを削除してください。それは、ユーザーが車に乗っているときや長距離を歩いているときに記録された多くのデータを削除するはずです
  2. ポイントの最後のセット(5つ以上)が同じエリアにあるかどうかチェックしてください。のデータ。したがって、ユーザーが自宅や職場で仕事をしているだけであれば、あまりにも多くのデータを失うことなく1つのポイントを保存することができます。これは、ほとんどのアプリケーション(99%)では問題ではありません。
+0

ありがとう、それは良いアドバイスです!私は私の位置更新リスナーを登録するとすでに#2をやっています(デフォルトは10mの最小距離です)。直線検出は良い方法ですが、それを実装する方法はわかりません。何らかの許容範囲が必要です。 – BadCash

+0

@BadCashこれを実現するには、いくつかの方法があります。私が考えることができる最高の1つは、2つの周囲の点によって作成された線と中点の距離を計算し、必要な誤差マージンによって決まる特定の値よりも小さいかどうかをチェックすることです。 –

+0

ありがとうもう一度:)うん、それは行く一つの方法だろう。私は別の考えを持っていました。つまり、AmB(m =中点)から直線経路ABの長さとの長さを比較し、最初の直線が直線パスよりも一定の許容範囲(より長い)ストレートと見なすことができますか? – BadCash

関連する問題