バックエンドの電話センサー(例:WiFi、加速度センサー)を定期的に読み取るタスクがあります。定期的センサー読み取りのためのAndroid AlarmManager
私の現在の解決策は、AlarmManagerを使用することです。
具体的には、我々は持っている: "オートログイン" プログラム(サービス)、私たちは応えて
public class Main extends Activity { ... Intent intent = new Intent(this, AutoLogging.class); mAlarmSender = PendingIntent.getService(this, 0, intent, 0); am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.RTC, 0, 5*1000, mAlarmSender); }
: "メイン" プログラム(活動)、我々はPendingIntent.getService使用で
定期的にアラームに:
public class AutoLogging extends Service { ... @Override public void onCreate() { Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show(); } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT).show(); } @Override public boolean onUnbind(Intent intent) { Toast.makeText(this, "onUnbind", Toast.LENGTH_SHORT).show() return super.onUnbind(intent); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show(); // Read sensor data here } @Override public IBinder onBind(Intent intent) { Toast.makeText(this, "onBind", Toast.LENGTH_SHORT).show(); return null; } }
私の問題は、次のとおりです。
私が使用している場合このアラームサービスは、各アラームでOnCreateとOnStartだけが呼び出されます。
私の質問は以下のとおりです。
(1)私たちはOnDestroy(または[OnBind]の、onUnbind)を呼び出す必要がありますか?
(2)これはAlarmManagerを使用する正しい方法ですか(「ブロードケース受信機」と比較して)?
ありがとうございます! Vincent
センサーデータの読み取りが終了した後、 "onStart"で "stopSelf"を呼び出す必要がありますか? – user523597
そして、btw、私の現在のPendingIntent.getServiceと "broadcast receiver"の違いは何ですか?どうもありがとう! – user523597
放送受信機の受信は、より長い時間を要する操作を行うべきではありません。センサーデータの読み取りに時間がかかる場合は、その操作を行うためにサービスを使用する必要があります。 http://stackoverflow.com/questions/3117350/alarmmanager-and-broadcastreceiver-instead-of-service-is-that-bad-timeout-prをご覧ください。 –