我正在开发一款Android应用程序,它使用我每隔五分钟调用一次AlarmManager的服务从惯性传感器收集数据。此服务有一个计时器,只收集一分钟的数据。所以我想收集一分钟的数据并睡四分钟(循环过程)。问题是具有setRepeating()的AlarmManager在API> 19上不准确(延迟一分钟或更长时间)。有很多帖子但不是一个明确的解决方案......在MainActivity中我有:
public void startservice(View view){
AlarmManager scheduler = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), SensorLogger.class);
PendingIntent scheduledIntent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
scheduler.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000 * 5, scheduledIntent);
}
在服务中就像:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
timer.scheduleAtFixedRate(new stoptask(), 60000, 60000);
...
return START_NOT_STICKY;
}
private class stoptask extends TimerTask
{
public void run()
{
...
timer.cancel();
stopSelf();
}
}
谢谢!
答案 0 :(得分:5)
你不能再使用重复的api了。您需要设置一个确切的警报,然后在警报内为重复设置一个新的警报。
我发布了一个库来处理android上的多个计时器实现 - 看看http://gabesechansoftware.com/timers-in-android/它可能会有所帮助。