这是我所拥有的:
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
之后重复启动唯一的问题是,如果
SomeActivity
在someIntervalInMillis
之后已经在运行,则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
的对象。