我开发了我的android闹钟应用程序,每小时需要一些东西(如下午1点,下午2点,下午3点,下午4点,下午5点,下午6点等)。
现在我正在使用alarmManager,因此我每小时都会收到一次broadCast事件。但有时事件会延迟。
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Log.d(Constants.APP_TAG, "setting beep alarm");
PendingIntent pendingIntent = PendingIntent.getBroadcast( context, 0, new Intent("com.mindedges.beephourly.intent.action.NEW_HOUR"),PendingIntent.FLAG_UPDATE_CURRENT );
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmSheduleHelper.getImmediateNextHour().getTimeInMillis(),AlarmManager.INTERVAL_HOUR, pendingIntent);
如何确保我准确地按时收到广播事件。
PS:在一些特定的手机/ anroid版本上出现延迟
答案 0 :(得分:4)
在Android 6.0 Marshmallow中,Google推出了“Doze”模式。
在此处详细了解:Optimizing for Doze and App Standby
和/或在这里观看:Android Marshmallow 6.0: Introduction to Doze Mode
在您的情况下,Google建议使用setAndAllowWhileIdle
强制手机绕过打盹模式for (i in 1:6 (subfieldsdata))
{output <- cor(subfieldsdata$i,myData$NP_Age,use="everything", method="pearson")
corr <- format(subcor, digits=3, nsmall=3)
gp <- ggplot(data=myData,aes(x=myData$NP_Age,y=subfieldsdat$i))
gp+geom_point()+stat_smooth(method="lm")+labs(x="age", y="i")+theme_linedraw(base_size=25)+annotate("text", x=c(88,90), y=1000, label=c("Pearson r =", corr))}
(和setExactAndAllowWhileIdle
而不是set
。)
NB!看起来,setExact
没有类似物,因此您必须逐个“{3}}手动”安排下一次重复。
对于使用Android 4.4 KitKat及更高版本的设备 - 请考虑使用setExactAndAllowWhileIdle
而不是旧setRepeating
,因为操作系统会尝试移动警报以最大限度地减少唤醒和电池使用。
可能需要记住更多要点 - 例如,某些原始设备制造商可能预装了自己的工具,以节省电池寿命,但至少它必须覆盖Android产品和大多数流行设备。