【发布时间】:2014-02-13 07:39:05
【问题描述】:
这是我所拥有的:
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 实例在堆栈顶部启动。
以下是我想要实现的简要目标:
- 开始,
AlarmManager被调用 - 如果
SomeActivity的实例已经在运行,则转到 4) 否则转到 3) - 启动
SomeActivity,结束 - 什么都不做,结束
任何想法应该如何完成,或者Intent 应该包含哪些标志(FLAG_ACTIVITY_SINGLE_TOP 似乎不起作用)?
【问题讨论】:
-
尝试将
android:launchMode="singleInstance"添加到清单中的活动标记中。 -
SomeActivity 是您应用的根 Activity(ACTION=MAIN 和 CATEGORY=LAUNCHER 的那个)吗?
-
@PankajKumar 请不要在没有先获得大量其他数据的情况下建议
launchMode="singleInstance"。使用这种启动模式可能会解决这个特定问题,但可能会给用户带来很多其他问题。一般来说,singleInstance 启动模式应该只在非常特殊的情况下使用(例如:HOME-screen 更换)。恕我直言,这是个坏建议。 -
@DavidWasser 感谢您的宝贵意见。会照顾。我不知道消极的一面。再次感谢你:)
标签: android android-intent alarmmanager android-pendingintent