gpt4 book ai didi

java - 为什么 AlarmManager 触发不一致

转载 作者:太空狗 更新时间:2023-10-29 16:18:05 25 4
gpt4 key购买 nike

我在我的 MainActivity.java (这是程序启动的主要 Activity )中的 onResume() 状态下注册一个警报管理器

protected void onResume() {
super.onResume();
if (Helper.isNetworkAvailable(this)) {
Intent intent = new Intent(this, NewsIntentService.class);
PendingIntent pi = PendingIntent.getService(this, 0, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(),
10 * 60 * 1000, pi);
} else {
// nothing done
}
}

但是我得到的结果不一致,下面的代码运行良好并且没有错误,它表明 PendingIntent 应该每 10 分钟触发一次,但是结果如下来自 logcat :

它开始运行良好:

2:00 pm (fired), 2:10 pm (fired), 2:30 pm (fired), ...

但一段时间后:

3:20 pm (fired), 3:27 pm (fired), 3:33 pm (fired), 3:38 pm (fired) ...

问题是最好在 Activity 的哪个生命周期注册一个AlarmManager,如果我所做的是正确的,运行不一致的原因是什么。

最佳答案

使用以下对我有用的代码:

1- private SharedPreferences 首选项;

2-

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Launch SharedPreferences
prefs = getSharedPreferences("Alarm", MODE_PRIVATE);

3-

protected void onResume() {
super.onResume();

if(!prefs.getBoolean(Helper.ALARM_SET, false)) {
Intent intent = new Intent(this, NewsIntentService.class);
PendingIntent pi = PendingIntent.getService(this, 0, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(),
10 * 60 * 1000, pi);

Log.i(Helper.ALARM_SET, "Alarm is set.");

SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(Helper.ALARM_SET, true);
editor.commit();
}
}

解释:

使用SharedPreferences保存一个 boolean 值AlARM_SET,简单精确,即使手机重启或关机,此代码也能正常工作。

关于java - 为什么 AlarmManager 触发不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22019697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com