Android 如何确定某个活动是否在堆栈上(仅调用finish())或不在堆栈上?

Android 如何确定某个活动是否在堆栈上(仅调用finish())或不在堆栈上?,android,android-widget,Android,Android Widget,我有很多活动的应用程序,用户可以在活动之间走动。如何找到某个活动是否在堆栈上(仅调用finish())或不在堆栈上?您需要更清楚地了解您要查找的内容 此类可用于了解正在运行的进程的状态。 还将活动作为SingleInstance添加到AndroidManifest.xml中 (应用程序->活动->启动模式->单实例)。 如果您的活动正在运行,则不会创建新活动 使用此选项将帮助您清除应用程序中在A之前调用的所有顶级活动 Intent intent = new Intent(this, A.cla

我有很多活动的应用程序,用户可以在活动之间走动。如何找到某个活动是否在堆栈上(仅调用finish())或不在堆栈上?

您需要更清楚地了解您要查找的内容

此类可用于了解正在运行的进程的状态。

还将活动作为SingleInstance添加到AndroidManifest.xml中 (应用程序->活动->启动模式->单实例)。 如果您的活动正在运行,则不会创建新活动

使用此选项将帮助您清除应用程序中在A之前调用的所有顶级活动

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

您可以检索活动任务(以及参与每个任务的组件)的列表,如下所示:

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
    ComponentName topActivity = tasks.get(0).topActivity;
    ...
}
ActivityManager am=(ActivityManager)context.getSystemService(context.ACTIVITY_服务);
列表任务=am.getRunningTasks(1);
如果(!tasks.isEmpty()){
ComponentName topActivity=tasks.get(0).topActivity;
...
}

但是,这需要您在AndroidManifest中请求android.permission.GET_TASKS权限。

您能提供一个更好的示例来说明为什么您希望找到一个活动来关闭它吗?我想不出你为什么要去关闭堆栈中某个随机的活动。