バックエンドで電話センサー (WiFi、加速度計など) を定期的に読み取るタスクがあります。
私の現在の解決策は、AlarmManager を使用することです。
具体的には、次のとおりです。
「メイン」プログラム (アクティビティ) では、PendingIntent.getService を使用します。
public class Main extends Activity { ... インテント インテント = 新しいインテント(これ、AutoLogging.class); mAlarmSender = PendingIntent.getService(これ、0、意図、0); am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.RTC, 0, 5*1000, mAlarmSender); }
「AutoLogging」プログラム (サービス) では、定期的にアラームに応答します。
public class AutoLogging extends Service { ... @オーバーライド public void onCreate() { Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show(); } @オーバーライド public void onDestroy() { super.onDestroy(); Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT).show(); } @オーバーライド public boolean onUnbind(インテント インテント) { Toast.makeText(this, "onUnbind", Toast.LENGTH_SHORT).show() super.onUnbind(インテント) を返します。 } @オーバーライド public void onStart(インテント インテント, int startId) { super.onStart(インテント、startId); Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show(); // ここでセンサーデータを読み込みます } @オーバーライド public IBinder onBind(インテント インテント) { Toast.makeText(this, "onBind", Toast.LENGTH_SHORT).show(); null を返します。 } }
私の問題は次のとおりです。
このアラーム サービスを使用すると、各アラームで OnCreate と OnStart のみが呼び出されます。
私の質問は次のとおりです。
(1) OnDestroy (または onBind、onUnbind) を呼び出す必要がありますか?
(2) これは AlarmManager を使用する正しい方法ですか (「ブロードケース レシーバー」と比較して)?
ありがとう!ヴィンセント