18

私はAndroidに比較的慣れていないので、私が尋ねていることは明白に思えるかもしれません(ただし、同じようなタイトルの質問をすべて読み、広範囲に検索しました)。加速度計を長期間継続的に監視する必要があります。2つのアプローチが提案されています。

1)加速度計が監視されている間ずっと保持される部分的なウェイクロックを取得します。と

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

最初のアプローチは、多くのバッテリー寿命を使用しているように見えます。2番目のアプローチでは、サービスが強制終了されることはめったにありませんが、「まれに」が何を意味するのかわかりません。どのアプローチを使用する必要がありますか?また、検討すべき代替案はありますか?

4

2 に答える 2

4

a を保持することWakeLockと前景を保持するServiceことは実際には関係がなく、どちらの方向が最適かを比較するべきではありません。

Android OS は、さまざまな要因に基づいてプロセスを交換するように構築されています。これは、プロセスが Android によって任意の時点で強制終了される可能性があることを意味します。これが発生した場合に、アプリがその状態を保存して復元できるようにするためのフレームワークを開発者に提供します。

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

現在、両方を組み合わせることで、必要なものを実現できますが、ユーザー コストが高くなります。携帯電話のアプリで CPU を常に実行したり、通知アイコンを通知バーに常に表示したりしたくありません (これがフォアグラウンド サービスの機能です)。

フォアグラウンド モードでサービスを開始しても、アプリが強制終了されないという保証はないことに注意してください。まれではありますが、まだ発生する可能性があります。

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

于 2012-08-13T05:48:33.463 に答える
1

私はまったく同じニーズと問題を抱えていました。解決策は、部分的な wake lock とフォアグラウンド サービスの両方を使用することだと思います。Android は、wake lock を保持しているバックグラウンド サービスを強制終了しないようにしますが、リソースが必要な場合は自由に強制終了し、後で再起動することもできます。それは多くの目的で問題ありませんが、少なくとも私の場合は十分ではありません。サービスをフォアグラウンド状態にすることは、サービスの停止が受け入れられないことを Android に伝える方法です。はい、極端な状況ではまだ発生する可能性がありますが、これは API 契約の違反になりますが、バックグラウンド サービスでは Android が自由に停止できます。したがって、おそらくそれが起こらないかのようにコーディングする必要がありますが、これは可能性がありますが、おそらくまれなエラーであることを知っておいてください.

于 2013-03-06T21:04:09.363 に答える