У меня есть задача периодически считывать показания датчиков телефона (например, WiFi, акселерометра) в бэкенде.
Мое текущее решение - использовать AlarmManager.
В частности, у нас есть:
В «основной» программе (активности) мы используем PendingIntent.getService:
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); }
В программе «Авторегистрация» (сервис) мы периодически реагируем на тревогу:
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 (по сравнению с "широковещательным приемником")?
Спасибо! Винсент