AlarmManager性能不一致

时间:2015-10-12 08:21:09

标签: android android-pendingintent

无论设备发生什么,我都需要我的活动才能保持领先。因此,确保其正常运行的机制之一也是使用AlarmManager

但它在各种设备上的表现并不一致:运行Android 4.2的原始平板电脑。按预期工作。运行相同Android版本的模拟器仅触发警报一次然后停止。 Android 5.x根本不会触发警报。

logcat中没有消息表明此设置存在任何问题。

添加AlarmManager条目的代码:

void runCheckTop(boolean create)
{
  String TOP_CHECK = ".TOP_CHECK";
  AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  String action = getPackageName() + TOP_CHECK;
  PendingIntent intent = PendingIntent.getBroadcast(this, 1, new Intent(action), PendingIntent.FLAG_CANCEL_CURRENT);
  log.i("kiosk mode", "setting AlarmManager entry '%s'", action);

  if (create)
    alarmManager.setInexactRepeating(AlarmManager.RTC, System.currentTimeMillis(), 500, intent);
  else
    alarmManager.cancel(intent);
}

接收者:

public class SIPIncomingCallReceiver extends BroadcastReceiver
{
  @Override
  public void onReceive(Context context, Intent intent)
  {
    log.e("Incoming receiver intent", intent.getAction());
    if (intent.getAction().equals(context.getPackageName() + MainActivity.TOP_CHECK))
    {
      //Notify the activity as well
      context.sendBroadcast(new Intent(context.getPackageName() + MainActivity.TOP_CHECK + "A"));
      //Get top running process
      String topAct = new TopRunningProcess().get("");
      log.i("TopCheck", "%s %s %b", topAct, context.getPackageName(), topAct.equals(context.getPackageName()));
      if (!topAct.equals(context.getPackageName()))
        context.startActivity(new Intent(context, Activity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    }
  }
}

有什么我做错了或者我错过了一个备忘录,该备忘录说在API 19之后不应该间歇使用AlarmManager吗?

1 个答案:

答案 0 :(得分:1)

  

我是否只是错过了一份备忘录,该备忘录表明在API 19之后,AlarmManager不应该用于如此短的间隔?

是的,好吧,我不确定是否有关于此的备忘录,但最小间隔现在为60000。如果您指定的数字小于该数字,android studio将报告:

enter image description here

代码中的引用可以找到here,我还没有找到引用此代码段以外的文档页面:

  

为减少滥用行为,对特定应用程序的警报响应频率有限制。在正常的系统操作下,它不会超过每分钟发送这些警报(此时会发送每个这样的待处理警报);

来自here