5

バッテリーの状態、wifi接続、位置データを定期的に監視し、結果をファイルに書き込む(後でサーバーに送信する)アプリを作成しています。アプリのインストール時にモニタリングを無効にする必要がありますが、それを有効にするユーザーは再起動後も存続する必要があります。たくさん読んだ後、私は基本的に2つのオプションがあることに気づきました:

  • サブクラスService化して、私の活動からそれを解き放ちます。フォアグラウンド、スティッキーなどに設定し、Androidによって殺されないことを期待します-Androidがそれを再作成する場合は注意してください(実際には3つのサービスがあるはずなので、それらの間の同期は面倒になる可能性があります)。サービスでスレッドを開始し(私が推測するエグゼキューターは必要ありません)、それを持っていThread.sleep(REGULAR_INTERVAL)ます。起きて、データを収集してファイルに書き込みます。収集した情報をブロードキャストし、それが実行されている場合はアクティビティに表示します(ブロードキャストレシーバーが登録されます)。すすぎ、繰り返しwhile(true)ます。これを中断する方法があります
  • アクティビティにPendingIntentをAlarmManagerに登録してもらいます。これにより、すべてのREGULAR_INTERVALが実行されます。このアプローチの技術的な詳細についてはあまり調べていませんが、このPendingIntentでIntentServiceを作成して実行できるようになることを願っています(これは道のりのようです)スレッド機構を無料で使用し、シャットダウンしますそのままで)。このアプローチのスケルトンコードを歓迎します。

どちらの場合も、共有設定を確認するためにブートレシーバーを登録する必要があると思います(すでにこれを行っています)。ケース1の場合はサービスを開始し、ケース2の場合はアラームイベントのレシーバーを登録してアラームマネージャーを設定します。 -それは私がいくつかのスケルトンコードを必要とする部分です。

それで、これを構築し始める前に、どちらが好ましいアプローチでしょうか?

要約すると、アプリはいくつかの電話のプロパティを監視し、ユーザーが電話を切ることを選択するまでそれらをファイルに書き込む必要があります。

4

3 に答える 3

6

ケース2の場合、アラームイベントのレシーバーを登録し、アラームマネージャーを設定します

受信者はマニフェストを介してすでに登録されています。

どちらが好ましいアプローチですか?

AlarmManager、通常はかなり長いと仮定しREGULAR_INTERVALます(たとえば、数分以上)。理想的には、その間隔はユーザーが構成できます。

デバイスが他の方法でスリープしている場合でもこれを実行する場合は、オプション#1は、WakeLock常にオンにしない限り機能しません。これにより、ユーザーはショットガンで顔を撃ちたくなるでしょう。

このアプローチのスケルトンコードを歓迎します。

AlarmManagerこれは、非アラームの使用法を示すサンプルアプリです_WAKEUP(つまり、これらのイベントは、他の理由でデバイスがすでに起動しているときにのみ発生する必要があります)。

これは、私AlarmManagerのを使用して、_WAKEUPアラームの使用法を示すサンプルアプリです。(またはそのようなもの)は、デバイスをあまり長く目覚めさせないために必要です(の十分な長さ)。したがって、作業を行うのに十分な時間、デバイスを目覚めさせ続けるために追加の手順を実行する必要があります。理論的には、あなたの仕事は、をいじる必要性を避けて、ちょうどで行うのに十分速いかもしれません。ただし、これらの時間ごとにディスクI / Oを実行することになります。これは、と呼ばれるメインアプリケーションスレッドでは実行しないでください。そして、あなたがあなたのデータをアップロードするために行くとき、あなたはおそらくWakefulIntentServiceWakefulIntentServiceAlarmManageronReceive()BroadcastReceiveronReceive()BroadcastReceiverWakefulIntentServiceonReceive()WakefulIntentServiceとにかく、バックグラウンドでもそれを実行しようとしている場合。

于 2013-03-16T16:13:07.810 に答える
1

2番目のオプションを使用し、intentService+AlarmManagerを使用する必要があります。この例を参照してくださいhttp://www.dotkam.com/2011/01/10/android-prefer-alarms-and-intent-receivers-to-services/

于 2013-03-16T20:14:01.507 に答える
0

定期的なタスクの長さに応じて、いくつかのアプローチのいずれかを選択できます。この質問ではそれらについて説明します-Androidでの定期的なタスクのスケジュール

タスクのスリープ時間が15分以上の場合、AlarmManagerを使用すると便利です。パターンはよく知られています。

于 2013-03-16T16:19:57.463 に答える