每60秒更新一次持续通知

时间:2016-01-25 15:58:18

标签: android alarmmanager

我的应用程序的核心功能是它持续通知倒数计时器,每分钟更新一次 - 即使应用程序被Android操作系统关闭。

首先,我使用服务运行计时器并更新通知,但这是内存/电池耗尽。所以我切换到使用AlarmManager完成计时器和重复闹钟,每隔60秒左右醒来更新通知:

Intent repeatingIntent = new Intent(this, AlarmReceiver.class);
repeatingIntent.putExtra(PERFORM_ACTION, ALARM_ACTION_UPDATE_NOTIFICATION);
PendingIntent repeatingAlarmIntent = PendingIntent.getBroadcast(this, 
       REQUEST_CODE_UPDATE_NOTIFICATION, repeatingIntent, 0);
AlarmManager am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);       
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
    SystemClock.elapsedRealtime()+1000, 
    REPEATING_ALARM_INTERVAL*1000, repeatingAlarmIntent);

这适用于我尝试过的大多数设备(并且它在RAM /电池/ CPU上更加友善)但是在Galaxy S6上,重复警报仅在每5分钟触发一次或者更不频繁。它有时会在设备插入时按时触发但是非常不一致。我已经尝试将重复间隔设置为30秒或更短,但它没有效果,警报没有被触发(我看到它每次都在LogCat中被触发)。其他非重复警报按时触发。

什么是确保持续通知至少每60秒更新到地狱或高水位的好方法?除了回到使用服务(呃!加上操作系统有时直接杀死RAM很少的设备上的服务),唯一想到的是设置5个不同的重复警报(具有不同的请求代码)并且具有每一个以交错的方式每5分钟触发一次。

2 个答案:

答案 0 :(得分:0)

而不是使用setRepeating()使用setExact()setWindow(),并在每次触发时设置新警报。这非常适用于API19。

答案 1 :(得分:-1)

  

即使应用程序被Android操作系统关闭

没有运气。当应用程序被操作系统杀死时,它已经死了,将无法做很多事情,包括。发布通知。

  

仅每5分钟触发一次,甚至更少发生

https://developer.android.com/reference/android/app/AlarmManager.html说:

" 注意:从API 19(KITKAT)开始报警传递不准确:操作系统 将移动警报以最小化唤醒和电池使用。"

此处还有更多内容:https://developer.android.com/training/scheduling/alarms.html