我的应用程序的核心功能是它持续通知倒数计时器,每分钟更新一次 - 即使应用程序被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分钟触发一次。
答案 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