11

リアルタイム監視機能を搭載した Android アプリを作成したいと考えています。モニタリング機能の 1 つに、オーディオ フローの監査があります。もう 1 つの機能は、周辺センサーと対話することです。これらの監視機能は、他の人によってトリガーされる可能性があります。さらに、消費電力を節約するために、オーディオ機能はポーリング モードで実行されます。つまり、一定時間スリープし、一定時間ウェイクします。

Android アプリケーションの設計方法を検討しています。

  • オーディオ機能をサービスとして設計するか、アクティビティとして設計するか? 問題は、アクティビティとして設計されている場合、一定時間後に画面がオフになるとオーディオ機能がオフになることです。

  • ポーリング機能の設計方法は? AlarmManager またはタイマーで内部スレッドを使用しますか?

私の目標は、消費電力をできるだけ節約することです。ありがとう。

4

3 に答える 3

1

ビクターに同意すると、間違いなくサービスを使用し、呼び出してメモリに固定する必要がありますstartForeground()

ただし、組み込みシステムの利用を検討することをお勧めしますHandler。機能をRunnableand callに配置しますmhandler.postDelayed(myRunnable, <some point in future>)。これにより、Android フレームワークが電力管理を最大限に活用できるようになります。

于 2012-09-12T00:59:07.223 に答える
1

私はフォローすることをお勧めします

a) サービスの使用。アクティビティは短命のエンティティです (画面上にある間のみ機能します)

b) サービスをフォアグラウンドにします (これを読んでください: http://developer.android.com/reference/android/app/Service.html#startForeground(int , android.app.Notification)。これにより、システムが強制終了する可能性が減少します。あなたのサービス

c) サービスで、スレッドを開始し、スレッドで必要なすべてのことを行います。

d) 定期的に実行したい場合は、スレッドで Thread.sleep() を実行してください (スレッドがスリープ状態のときは CPU サイクルを消費しません)。

私は c) と d) が AlarmManager よりも好ましいと思います。これはドキュメントの一部です(http://developer.android.com/reference/android/app/AlarmManager.html):「注:アラームマネージャーは、特定の時間にアプリケーションコードを実行したい場合を対象としています, アプリケーションが現在実行されていない場合でも. 通常のタイミング操作 (ティック、タイムアウトなど) では、Handler を使用する方が簡単で効率的です。"

アプリケーションが実行されているので、永続的に実行されているスレッドをいくつか用意して、その上で何かを実行することをお勧めします。一般的に言えば、Handler、HandlerThread、MessageQueue は、より複雑なメッセージ処理とスケジューリングのための便利なクラスです。あなたのケースは非常に単純で、通常のスレッドで十分であるように見えます。

于 2012-08-28T16:13:19.817 に答える
0

それがサービスです。

また、追加の堅牢性が必要になる場合があります。フォアグラウンドサービスであっても、サービスを強制終了して後で再起動することはできません。これにより、監視が停止します。

UI からサービスを開始します。デバイスの再起動後もサービスを存続させたい場合は、android.intent.action.BOOT_COMPLETED の BroadcastReceiver からもサービスを開始します。

ここの他の回答で説明されているように、サービスにスレッドを作成します。

さらに、Alarm Manager を使用して定期的にサービスを再開します。複数の startService() 呼び出しは問題ありません。すでに実行されている場合、サービスは引き続き実行されます。ただし、システムによって忘れられた場合、たとえば、一連のリソース不足の状態の後、すぐに再起動されます。

責任を持ってこれらのアラームをスケジュールします。良き市民になるためには、絶対に最小限の頻度を設定してください。結局のところ、Android にはサービスを停止する正当な理由がいくつかありました。

一部のサービスでは、さらに多くの手順が必要になる場合がありますが、この場合はこのアプローチで十分と思われます。

于 2012-09-13T12:41:44.640 に答える