У меня есть задача периодически считывать датчики телефона (например, 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);
}
В программе «AutoLogging» (услуга) мы периодически реагируем на сигнал тревоги:
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 (по сравнению с "ресивером"?
Спасибо!Винсент