Where/how 我是否应该启动我的 AlarmManager 而不是每次创建 Fragement 时都执行?
Where/how should I start my AlarmManager to not execute everytime when my Fragement created?
我想设置一个每 20 秒触发一次的通知。我在 Fragment:
的 onCreate() 方法中设置了一个 AlarmReceiver
Intent alarmIntent = new Intent(getActivity(), IntentService.AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(getContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 20000, pendingIntent);
在我的 IntentService class 我有以下静态 class:
public static class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent send = new Intent(context, IntentService.class);
context.startService(send);
}
}
我想在上面开始的那个 IntentService class 中创建我的通知。
AlarmManager 起作用了,它每 20 秒执行一次,但它也会在我的 Fragment 每次创建时触发。
我的问题是:Where/how 我是否应该启动我的 AlarmManager 以便在我的 Fragement 创建时不每次都执行?
你不是让闹钟管理员在从现在开始的 20 秒内然后每 20 秒触发一次闹钟,而是现在 然后每 20 秒。这就是 Android 立即触发警报的原因 - 它赶上了过去的警报,而 "now" 是代码完成后的几毫秒。您需要确保第一个预定闹钟是在未来。
所以你真正需要的是:
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 20000, 20000, pendingIntent);
这会告诉警报管理器在 20 秒后安排下一个警报,每 20 秒重复一次。
我想设置一个每 20 秒触发一次的通知。我在 Fragment:
的 onCreate() 方法中设置了一个 AlarmReceiver Intent alarmIntent = new Intent(getActivity(), IntentService.AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(getContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 20000, pendingIntent);
在我的 IntentService class 我有以下静态 class:
public static class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent send = new Intent(context, IntentService.class);
context.startService(send);
}
}
我想在上面开始的那个 IntentService class 中创建我的通知。
AlarmManager 起作用了,它每 20 秒执行一次,但它也会在我的 Fragment 每次创建时触发。
我的问题是:Where/how 我是否应该启动我的 AlarmManager 以便在我的 Fragement 创建时不每次都执行?
你不是让闹钟管理员在从现在开始的 20 秒内然后每 20 秒触发一次闹钟,而是现在 然后每 20 秒。这就是 Android 立即触发警报的原因 - 它赶上了过去的警报,而 "now" 是代码完成后的几毫秒。您需要确保第一个预定闹钟是在未来。
所以你真正需要的是:
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 20000, 20000, pendingIntent);
这会告诉警报管理器在 20 秒后安排下一个警报,每 20 秒重复一次。