我有这种情况与Activity堆栈有关,但我已经足够新到Android开发人员,现在不知道如何响应它。通知开放活动和后退按钮?限制为一个实例?
我有一个像秒表一样的应用程序。当您启动它时,正在进行的通知会进入通知栏,并会一直保持,直到您停止秒表。我注意到,如果我的秒表正在前台运行,并且我触摸通知,它会创建一个秒表活动的新实例,并将旧的实例移出屏幕。这会产生后退按钮的问题(您按回来,新实例消失以显示旧实例)。这很有道理,但我不希望它发生这样的事情。我能做些什么来防止我的应用程序的多个实例运行?
我有这种情况与Activity堆栈有关,但我已经足够新到Android开发人员,现在不知道如何响应它。通知开放活动和后退按钮?限制为一个实例?
我有一个像秒表一样的应用程序。当您启动它时,正在进行的通知会进入通知栏,并会一直保持,直到您停止秒表。我注意到,如果我的秒表正在前台运行,并且我触摸通知,它会创建一个秒表活动的新实例,并将旧的实例移出屏幕。这会产生后退按钮的问题(您按回来,新实例消失以显示旧实例)。这很有道理,但我不希望它发生这样的事情。我能做些什么来防止我的应用程序的多个实例运行?
我该怎么做才能防止我的应用程序的多个实例运行?
在你Intent
您与PendingIntent
使用的Notification
,添加setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
或setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
,无论行为符合您的需求更好。
他们的行为有什么不同? – 2011-02-23 06:07:00
@Corey Ogburn:如果您有多个活动,那么'CLEAR_TOP'变体将会删除任务历史记录,只留下由'Notification'触发的活动。 “REORDER”变体只是将现有活动拉到前台,使任何其他活动仍留在任务历史记录中。这些标志的文档有更多细节。 – CommonsWare 2011-02-23 11:54:47
您也可以禁用后退按钮。不像CommonsWare解决方案那么优雅,但有些选项没有问题!
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
return true;
}
return super.onKeyDown(keyCode, event);
}
您在提问时应该使用DRY原则。我不认为有必要在你的问题中加入“[Android]”,当你用android标签标记它时。 – 2011-02-22 22:08:24