android - 调用 startActivity 时在 onStop() 中查找下一个 Activity

标签 android android-activity android-intent

在通过启动带有 startActivity() 的新 Activity 调用 onStop() 之后,如何确定当前 Activity 的 onStop() 方法中的下一个 Activity?

目前我唯一的想法: 声明我用作全局变量的 Intent ,并使用 intent.getClass() 或类似的东西在 onStop() 方法中检查它。这样可以吗?不知何故感觉像是快速而肮脏的方法。

感谢您的帮助!

编辑: 所以这是场景:

Activity1 是一个 ListView ,用户可以在其中选择一行或多行,然后单击“提交”,现在所有选定的行都会在后台任务中提交到服务器。

我在我的服务中使用一个数组来存储提交前选择的 ID,因此如果用户离开 ListView 而没有点击提交,这个数组仍然会充满过时的选择。

因此,如果用户选择一行或多行然后在没有“提交”的情况下退出 Activity1,我希望放弃选择,所以我确实在 Activity1 的 onStop() 方法中调用了一个方法来清除该数组。这很好用,但当然有不同的方法可以离开 Activity1。例如,我确实有一个包含 3 个条目的上下文菜单,每个条目都会启动另一个 Activity 。

现在我需要保留我的数组值,以防仅从上下文菜单中选择了一个特殊的单个 Activity (比如 Activity2)。

抱歉,如果不清楚,但我不是在谈论 Activity 实例,而是在谈论一般的 Activity 类型。

所以我需要在 onStop() 方法中知道的是我们是否已从 Activity1 切换到 Activity2.java 或 Activity3.java。

也许 Activity1 的 onStop() 甚至不是我明确或不明确决定的正确位置?

再次感谢

最佳答案

您可能想在这里对您的 Intent 进行一些澄清,因为这个问题有点含糊。

默认情况下,当一个 Acitvity 启动时,它被放置在一个称为后栈的队列中。当 Activity 完成时,它会出列,而前一个 Activity 会被带到前台。

开始一个新 Activity 时要小心,如果你没有正确设置它,你将创建该 Activity 的一个新实例,即使一个已经存在于后台堆栈中。如果我理解你的问题,你会寻找:

Intent intent = new Intent(getContext(), NewClass.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这将清除堆栈,除了提到的 Activity ,并将其带到前台,如果它存在于后台堆栈中。

This SO thread显示如何清除堆栈 ( Android guide )。

看看here ,它描述了如何管理任务和 Activity ,但 Google 警告不要操纵默认行为。

关于android - 调用 startActivity 时在 onStop() 中查找下一个 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344131/

相关文章:

android - 我应该使用什么权限来接收 android 通知?

java - 在 AsyncTack 中使用 ProgressDialog 从扩展 Application 的类中调用

android - 在 Android 中启动 Activity 时如何阻止 EditText 获得焦点?

android - 为什么我不能使用 Uri 类进行调用?

安卓:意向服务。在哪里保存文件?

java - MyWebViewClient 类型未定义方法 startActivity(Intent)

android - 权限运行时 "Attempt to get length of null array"

android - 没有焦点的自定义对话框

java - 上传图片时出现问题

java - 找不到使用操作和数据处理 Intent 的 Activity