这是我所拥有的:

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);


它工作正常,即Activity在someDistantMillis启动,并在someIntervalInMillis之后重复启动

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

这是我要实现的简要内容:


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


有什么想法应该怎么做,或者Intent应该包含哪些标志(FLAG_ACTIVITY_SINGLE_TOP似乎不起作用)?

最佳答案

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

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的对象。

08-05 06:26