请求代码不会自动传递给已启动的活动,因为它不需要(也不应该)知道该值。它只需要知道该做什么,而不是从哪里开始。
开始活动实际上只是调用方法的另一种形式。调用方法时,您会同步收到结果(在调用的位置)。在这种情况下,您仅传递方法需要完成其工作的信息。您没有告诉它从何处调用它。
启动活动是调用方法的异步模拟,在这种情况下,您会通过特殊方法onActivityResult()接收结果。在这种方法中,您需要知道如何处理刚刚收到的结果,并且您有相应的请求代码。
为了更清楚地说明为什么将请求代码作为参数不是一个好主意,请考虑示例活动,该活动显示了您可以购买的产品。在此活动中,有两个按钮分别标记为“购买”和“登录”(因为您当前尚未登录)。按下“登录”将启动一个名为“登录”的活动,该活动将尝试使用提供的信息登录用户。按下“购买”将首先启动完全相同的“登录”活动,如果登录成功,则开始购买活动。
现在,“登录”按钮使用请求代码1来启动登录活动,但是“购买”按钮不能使用相同的请求代码,因为如果成功登录,它将必须执行其他操作。因此,“购买”按钮使用请求代码2。
在“登录”活动中,根据从何处调用,您可能会收到两个不同的请求代码,但是您将需要执行相同的过程。
因此,如果您将请求代码作为参数传递,则最终将需要为几个不同的请求代码执行相同操作的代码,例如:
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
您还将最终将请求代码常量存储在中央位置,例如,名为RequestCodes的类。
简而言之,请求代码仅应用于决定如何处理接收到的结果。这样,您最终将获得更具模块化,易于维护和易于扩展的代码。