2012-02-01 10 views
8

私はAndroidには比較的新しいので、私が尋ねるのは明らかです(同様のタイトルの質問をすべて読んだことがありますが、広範囲に検索しています)。私は加速度計を長期間連続して監視する必要があります。 1)加速度計が監視されている時間全体にわたって保持される部分的な後退ロックを取得する。Android:前景サービスとwakeLock

2)フォアグラウンドサービスで加速度計を監視します。

最初のアプローチでは、バッテリ寿命が長いようです。 2番目のアプローチでは、まれにしか殺されないサービスがもたらされるはずですが、「まれに」何を意味するのか分かりません。どちらのアプローチを使うべきですか、私は考慮すべき選択肢がありますか?

+0

ヘイダグ、どこでその情報を入手できましたか? – Bush

+0

アラームマネージャのアプローチを試してみたい場合は、http://stackoverflow.com/questions/15451347/android-design-background-long-running-service-or-alarmmanager –

答えて

5

持ち株a WakeLockと前景Serviceは実際には関係がなく、比較するべきではありません。

Android OSは、さまざまな要因に基づいてプロセスをスワップアウトするために構築されています。これは、あなたのプロセスがAndroidによっていつでも殺される可能性があり、開発者がアプリケーションの状態を保存して復元できるようにするためのフレームワークを提供することを意味します。

WakeLockは、単にCPUがスリープ状態になるのを防ぎ、電話が使用されていないときにバッテリを節約するのに役立ちます。

ここでは、両方を組み合わせることで、ユーザーの欲しいものを達成するのに役立ちますが、ユーザーの負担がかかります。私は携帯電話のアプリケーションがCPUを常に稼動させ続けるか、または通知バーに常時表示される通知アイコン(フォアグラウンドサービスと同じ)を望んでいません。

フォアグラウンドモードでサービスを開始するは、のアプリが殺されることを保証しません。まれにしか起こらないかもしれません。

ここで達成しようとしていることは何ですか?なぜデバイスの加速度計を監視し続けるのですか?アプリのActivityがフォアグラウンドになっている場合にのみ、モニタする必要があります。

+2

すべてのフォアグラウンドサービスがスリープ解除ロックを保持しますか?例えば、音楽アプリは部分的な起床ロックを保持しています。これはすべてのフォアグラウンドサービスの場合もそうですか? – Basher51

1

私はまったく同じ必要性と問題を抱えていました。私は、解決策は、部分的なウェイクロックとフォアグラウンドサービスの両方を使用することだと考えています。 Androidはウェイクロックを保持しているバックグラウンドサービスを強制終了させようとしますが、リソースが必要なときには強制終了し、後で再起動する可能性があります。それは多くの目的のためには大丈夫ですが、少なくとも私の場合は十分ではありません。サービスをフォアグラウンド状態にすることは、それを殺すことが容認できないということをアンドロイドに伝える方法です。はい、それはまだ極端な状況で起こる可能性がありますが、これはAPI契約の違反になりますが、バックグラウンドサービスではAndroidは無料で終了できます。したがって、決して起こらないようにコード化するべきですが、これが可能性はあるがおそらくまれなエラーであることを知っているだけです。

+0

フォアグラウンドサービスはすべてウェイクロックを保持しますか?例えば、ミュージックアプリケーションはウェイクロックを部分的に保持します。これはすべてのフォアグラウンドサービスの場合も同様ですか? – Basher51

関連する問題