我有一个场景。我试图使用我创建的PinActivity锁定我的应用程序。我正在运行一个具有5分钟计数器计时器的服务。如果用户5分钟内未在应用中进行任何活动。我将向他展示PINActivity,他必须解锁并输入该应用程序。我正在这样启动PINActivity

Intent loginIntent = new Intent(this, PINActivity.class);
loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(loginIntent);


因此,当用户返回到应用程序并看到PINActivity时,他将对其解锁并进入应用程序。但是,如果用户没有输入PIN并再次离开应用理想状态超过5分钟该怎么办(注意:当用户将应用带到前台时,我的服务会启动计数器计时器)。我不想在顶部添加同一PINActivity的多个实例。如何确定顶部只有一个PINActivity

最佳答案

您应该使用FLAG_ACTIVITY_SINGLE_TOP。如果堆栈顶部已经存在PINActivity实例,这将阻止Android启动PINActivity

Intent loginIntent = new Intent(this, PINActivity.class);
loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP);
startActivity(loginIntent);


请不要尝试像其他人建议的那样使用特殊的启动模式,例如singleTasksingleInstance。这将无济于事,并使您的问题复杂化。

您也可以在清单条目中为android:launchMode="singleTop"指定PINActivity。与FLAG_ACTIVITY_SINGLE_TOP具有相同的效果。

08-19 13:56