リクエストコードは、この値を知る必要がない(そして知る必要がない)ため、開始されたアクティビティに自動的に渡されません。何をすべきかを知る必要があるだけで、どこから始めたのかを知る必要はありません。
アクティビティの開始は、実際にはメソッドを呼び出す別の形式です。メソッドを呼び出すと、結果が同期的に受信されます(呼び出しを行った場所で)。この場合、メソッドがその作業を行うために必要な情報のみを渡します。どこから呼んだのかはわかりません。
アクティビティの開始は、メソッドの呼び出しの非同期アナログです。この場合、特別なメソッドonActivityResult()で結果を受け取ります。この方法では、受け取ったばかりの結果をどう処理するかを知る必要があり、そのためのリクエストコードがあります。
リクエストコードをパラメータとして渡すのが得策ではない理由をもう少し明確にするために、購入できる製品を示しているアクティビティの例を検討してください。このアクティビティには、「購入」と「ログイン」というラベルの付いた2つのボタンがあります(現在ログインしていないため)。「ログイン」を押すと、「ログイン」という名前のアクティビティが開始され、提供された情報を使用してユーザーにログインしようとします。「購入」を押すと、最初にまったく同じ「ログイン」アクティビティが開始され、ログインが成功した場合は、購入アクティビティが開始されます。
現在、[ログイン]ボタンはリクエストコード1を使用してログインアクティビティを開始しますが、[購入]ボタンは、ログインが成功した場合に別の処理を行う必要があるため、同じリクエストコードを使用できません。したがって、「購入」ボタンはリクエストコード2を使用します。
「ログイン」アクティビティでは、呼び出し元によって2つの異なるリクエストコードを受け取る場合がありますが、まったく同じ手順を実行する必要があります。
したがって、リクエストコードをパラメータとして渡すと、次のようないくつかの異なるリクエストコードに対して同じことを行う必要があるコードになります。
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
また、RequestCodesという名前のクラスなど、中央の場所に要求コード定数を格納することになります。
つまり、リクエストコードは、受信した結果をどう処理するかを決定するためにのみ使用する必要があります。このようにして、よりモジュール化され、保守が容易になり、コードを拡張しやすくなります。