首页 > 解决方案 > Android 报警管理器工作不一致

问题描述

我想用 BroadcastReceiver 和 AlarmManager 运行一些后台操作。但有时onReceive函数调用晚了10秒。

这是 onReceive 的日志:

2021-07-01 11:32:53.909: onReceive
**2021-07-01 11:33:13.796: onReceive**
2021-07-01 11:33:23.870: onReceive
2021-07-01 11:33:33.906: onReceive
2021-07-01 11:33:43.940: onReceive
2021-07-01 11:33:53.975: onReceive
**2021-07-01 11:34:13.811: onReceive**
2021-07-01 11:34:23.854: onReceive
2021-07-01 11:34:33.920: onReceive
2021-07-01 11:34:43.951: onReceive
2021-07-01 11:34:53.988: onReceive
**2021-07-01 11:35:13.837: onReceive**
2021-07-01 11:35:23.878: onReceive
2021-07-01 11:35:33.915: onReceive
2021-07-01 11:35:43.988: onReceive
2021-07-01 11:35:54.022: onReceive
2021-07-01 11:36:13.860: onReceive
2021-07-01 11:36:23.890: onReceive
2021-07-01 11:36:33.924: onReceive
2021-07-01 11:36:43.954: onReceive
2021-07-01 11:36:54.013: onReceive
**2021-07-01 11:37:13.931: onReceive**
2021-07-01 11:37:23.963: onReceive
2021-07-01 11:37:33.998: onReceive
2021-07-01 11:37:44.035: onReceive
2021-07-01 11:37:54.077: onReceive
**2021-07-01 11:38:13.955: onReceive**
2021-07-01 11:38:23.985: onReceive
2021-07-01 11:38:34.021: onReceive
2021-07-01 11:38:44.060: onReceive
2021-07-01 11:38:54.102: onReceive

默认等待值是 10000 毫秒,但可以更改,这就是我setAlarmManager()每次调用的原因。

这是我的代码:

  public void setAlarmManager() {
         Intent intent = new Intent(context, TestReceiver.class);
         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, intent , 0);

         AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         long elapsedRealTime = SystemClock.elapsedRealtime() + 10000;
         alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, elapsedRealTime, pendingIntent); 
    }


public void onReceive(final Context context, Intent intent)
{
    try
    {
        //do some work
    }
    catch(Exception ex)
    {
        ...
    }
    finally
    {
        setAlarmManager();
    }
}

标签: androidbroadcastreceiveralarmmanager

解决方案


推荐阅读