在我的代码中,setRepeating()
方法上的Interval(第三个参数)似乎没有每5秒触发一次。
它随着时间的推移而不断增加,它就像第一个或第二个大部分时间一样,但其他人在40+secs
那么这里有什么问题?
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent i = new Intent(this, MainActivity2Activity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE );
am.setRepeating(RTC_WAKEUP,System.currentTimeMillis(),1000*5,pi);
}
}
答案 0 :(得分:1)
当你每5秒发射一次警报时:
注意:对于计时操作(刻度,超时等),使用Handler更容易,也更有效。
您的代码没问题。您遇到的延迟说明可能是:
注意:从API 19开始,所有重复警报都不准确。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,每次重新安排如上所述。 targetSdkVersion早于API 19的旧应用程序将继续将所有警报(包括重复警报)视为精确警报。
答案 1 :(得分:0)
根据我的理解,您在创建MainActivity.class 5秒后尝试运行MainActivity2Activity.class。
我建议您在待处理的意图中使用FLAG_UPDATE_CURRENT而不是FLAG_CANCEL_CURRENT 。 FLAG_CANCEL_CURRENT将保留您的第一个待定意图并且不会更新或创建新意图,除非您先取消原始待处理意图。 使用FLAG_UPDATE_CURRENT将确保每次执行MainActivity.class时更新挂起的intent,以便在创建MainActivity.class 5秒后准确触发挂起的intent。
希望这有帮助。
答案 2 :(得分:0)
基本上你写了 PendingIntent.FLAG_CANCEL_CURRENT 而不是 PendingIntent.FLAG_ONE_SHOT 。
警报管理器
设置警报的代码AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(ALARM_SERVICE);
Intent i1 = new Intent(this, ReceiveAlarmActivity.class);
i1.putExtra("Key", "Value");
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 0, i1, PendingIntent.FLAG_ONE_SHOT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Your_Date.getTime(), 5000 operation);
您必须传递 日期。
完成