AlarmManager没有启动Activity(当它存在时)

时间:2014-02-13 07:39:06

标签: android android-intent alarmmanager android-pendingintent

这就是我所拥有的:

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已经在someIntervalInMillis之后运行,则会在堆栈顶部启动另一个SomeActivity实例。

以下是我想要实现的内容:

  1. Strart,AlarmManager被称为
  2. 如果SomeActivity的实例已在运行,则转到4)否则转到3)
  3. 启动SomeActivity,结束
  4. 什么都不做,结束
  5. 任何想法应该如何完成,或Intent包含哪些标记(FLAG_ACTIVITY_SINGLE_TOP似乎不起作用)?

1 个答案:

答案 0 :(得分:2)

boolean

中创建一个静态Activity成员字段
public static boolean running = false;

onStart()方法集runningtrue以及onStop()false。然后,在您要确定Activity是否正在运行的位置,只需执行此if声明:

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

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