android finish()将返回哪里

时间:2011-11-16 07:59:22

标签: android android-intent intentfilter activity-finish

我的活动可以通过我的父活动和其他应用程序通过意图过滤器(即ACTION_VIEW)调用。

当我在我的活动中调用finish()时,如何返回正确的调用者?

即: 其他应用 - >我的活动 - >完成() - >其他申请

目前,如果我的主要活动仍在运行,则finish()将返回到我的主要活动,尽管它是从其他应用程序调用的。

4 个答案:

答案 0 :(得分:1)

如果您使用startActivityForResult(Intent)开始一项活动,那么您可以获得第二项活动,该活动以getCallingActivity()开始第一项活动。

答案 1 :(得分:1)

如果您在活动上调用finish方法,您将返回历史堆栈中的最顶层活动。默认情况下,它是您访问的上一个活动。

例如:

主要> A>乙

如果在活动B上调用完成,您将返回活动A. 如果在活动A上调用了完成,但活动B仍处于活动状态,则您将保留活动B,因为它是历史堆栈中最顶层的活动。 如果在活动B上调用了finish,但由于某种原因,活动A不在您的历史堆栈中(很可能,如果您指定不能将活动A保存在历史堆栈中),您将返回活动主页而不是活动B

答案 2 :(得分:0)

当您想要调用子活动时,请使用startactivityforresult()。你会回到好的。

答案 3 :(得分:0)

阅读Tasks - 通过从另一个任务(/ application)调用活动,您将现有的Task带到前台,其中可能包括后端堆栈中的其他活动想。我建议指定可以从其他应用程序启动的活动的android:taskAffinity。由于这将确保此活动将成为任务中唯一的活动,因此无论是从其自己的应用程序还是其他应用程序启动它都无关紧要。

编辑:“任务”链接中的图4显示了您的情况。