2012-03-12 5 views
1

私は、実行中のタイマー(時計のように秒単位でUIを更新)とGPSを介して距離を記録するアプリを作成しています。意図したユースケースは、このアプリを最大2時間稼働させることです。そのため、システムによって殺されるべきではありません。今日市場に出ている多くの実行中のアプリケーションと非常によく似ています(ただし、これは私が作っているものではありません)。Android - タイマーとGPSトラッキング。私はサービスを利用すべきですか?

システムによって殺されるべきではないという要件は私にサービスの作成を指していますが、タイマーや距離の更新をUIに伝えて、実際には効率が悪いことがよくあります。

サービスを使用するのが最善のアプローチですか?もしそうなら、UIの時間と距離の更新を効率的に処理する方法はありますか?あるいは、システムが私のアプリを殺さないようにする別の方法がありますか?

答えて

1

実際にサービスを使用することに決めましたが、アクティビティが一時停止しているときにサービスを起動して使用することに決めました。アクティビティは現在の状態をサービスに渡し、実行する必要があるすべてのものを処理します。再開すると、アクティビティはサービスから状態を戻して終了します。

0

あなたのアプリのアクティビティが別のアクティビティの後ろにプッシュされていても、電話画面がオフになっても何かが起きている必要がない限り、サービスは必要ありません。すべてが平等であれば、再開したときにスマートにアプリをピックアップするほうが良いでしょう。

たとえば、ストップウォッチをお持ちの場合は、開始時間を記録しています。アプリのアクティビティが一時停止しているときは、すべてを停止します。あなたはカウントを止める。再開すると、開始時刻がわかるので、正しいタイミングでピックアップしてUIの更新を再開できます。

アクティビティのUIを更新するためのタイマー/スレッドを作成するだけです。 onResume()で開始し、onPause()で停止します。

+0

ありがとうございました。それはタイマーでは理にかなっていますが、GPSの部分ではうまくいかないと思います。私は最後に知っている場所を保存することができますが、彼らはターンを行うことができるので、アクティビティに戻ったときに単にその最後の場所を使うのは正確ではありません。 – Scott

+0

アクティビティ内にロケーションリスナーを登録します。 onResume()をリスンし、onPause()を停止します。あなたの活動がフォアグラウンドにないときに場所を追跡する必要がある場合は、サービスが必要です。 –

関連する問題