Android AlarmManager 在每个活动上触发

Posted

技术标签:

【中文标题】Android AlarmManager 在每个活动上触发【英文标题】:Android AlarmManager triggered on every activity 【发布时间】:2014-07-09 17:40:56 【问题描述】:

我有一个活动,它使用AlarmManager 创建一个应该每 3 分钟触发一次的警报。当应用程序关闭时会发生这种情况,但是当您打开应用程序并开始进入应用程序的不同方面时,每次加载 Activity 时都会调用警报 onReceive() 方法!

如何停止该功能?

我希望闹钟每 3 分钟运行一次

这是我的广播接收器:

public void onReceive(Context context, Intent intent) 
    Toast.makeText(context, "Testing...", Toast.LENGTH_SHORT).show();

这是我的 setalarm 方法(在 MainActivity onCreate 中)

public void startAlarmManager()

    Intent dialogIntent = new Intent(getBaseContext(), AlarmReceiver.class);

    alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    pendingIntent = PendingIntent.getBroadcast(this, 0, dialogIntent,PendingIntent.FLAG_CANCEL_CURRENT);
    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 180000, pendingIntent);


【问题讨论】:

【参考方案1】:

您创建警报的代码位于 onCreate() 中,因此每次调用 onCreate() 时都会创建警报。您可以在首次创建警报时设置布尔标志,并且仅在必要时设置警报。只要确保将该布尔值保存到包中,如果包不为空,则在 onCreate() 中检索它。

有一张非常漂亮的Activity生命周期图here。

在您的特定情况下,您应该了解系统经常调用onCreate()。例如,每当您旋转设备以更改其方向(例如,从纵向变为横向)时,都会调用onCreate()(除了其他生命周期方法之外)。这些方法以特定顺序和特定时间调用,因此您需要围绕该生命周期进行编程。

【讨论】:

以上是关于Android AlarmManager 在每个活动上触发的主要内容,如果未能解决你的问题,请参考以下文章

android app被杀死 alarmmanager能不能唤醒

Android - AppWidgets、AlarmManager 和 AsyncTask

Android定时器AlarmManager

Android闹钟 AlarmManager的使用

小部件如何在 Android 中更新(使用 AlarmManager)

Android 8.0 AlarmManager 后台定时任务