setExact() 不会在时间(更早)触发



我使用的是min API 19,并在Android 6.0中执行。我已经用setExact创建了一个警报(我想每5秒执行一次)。为了测试它,我刚刚做了这个(我在一个片段中创建了它):

Intent intent = new Intent(getActivity(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) (getActivity().getSystemService(getContext().ALARM_SERVICE));
alarmManager.setExact(AlarmManager.RTC_WAKEUP, 5000, pendingIntent);

它叫:

public class AlarmReceiver extends WakefulBroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Test"+SPreferences.getCountedSample(context), Toast.LENGTH_SHORT).show();
 }
}

但当我点击按钮时,吐司会在两三秒钟后出现。

如果我将触发时间从5000更改为10000甚至0,则不会更改显示Toast消息的时间(单击按钮(创建警报)后10秒)。它总是在点击按钮后2或3秒呼叫广播。

为什么触发器不起作用?

尝试替换:

alarmManager.setExact(AlarmManager.RTC_WAKEUP, 5000, pendingIntent);

带有:

alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, pendingIntent);

setExact()的第二个参数是时间。您选择了RTC_WAKEUP,因此时间在实时时钟的时基中。该时钟的"现在"值为System.currentTimeMillis(),因此从现在起5秒为System.currentTimeMillis()+5000

最新更新