警报管理器未启动活动(如果存在)



这是我所拥有的:

Intent intent = new Intent();
intent.setClass(context,SomeActivity.class);
PendingIntent pending  = PendingIntent.getActivity(context,requestCode,intent,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, someDistantMillis, someIntervalInMillis,pending);

它工作正常,即活动在someDistantMillis启动并在someIntervalInMillis后反复启动

唯一的问题是,如果SomeActivity已经在堆栈顶部启动另一个SomeActivity实例someIntervalInMillis运行。

以下是我想要实现的简要目标:

  1. 斯特拉特,AlarmManager被称为
  2. 如果 SomeActivity 的实例已经在运行,则转到 4) 否则转到 3)
  3. 启动SomeActivity,结束
  4. 什么都不做,结束

任何想法应该如何做,或者Intent应该暗示哪些标志(FLAG_ACTIVITY_SINGLE_TOP似乎不起作用)?

Activity中创建一个静态boolean成员字段:

public static boolean running = false;

onStart()方法中,running设置为true,在onStop()设置为false。然后在您要确定Activity是否正在运行的地方,只需执行以下if语句:

if(SomeActivity.running) {
   // go to step 4
} else {
   // go to step 3
}

static关键字在这里至关重要,因为这意味着running字段对于SomeActivity类的所有实例都是通用的,因此您不需要访问特定SomeActivity的对象。

最新更新