Kod żądania nie jest przekazywany do rozpoczętego działania automatycznie, ponieważ nie musi (i nie powinien) znać tej wartości. Musi tylko wiedzieć, co robić, a nie skąd się zaczęło.
Rozpoczęcie działania jest po prostu kolejną formą wywołania metody. Kiedy wywołujesz metodę, otrzymujesz wynik synchronicznie (dokładnie tam, gdzie wykonałeś wywołanie). W tym przypadku przekazujesz tylko informacje, których metoda potrzebuje do wykonania swojej pracy. Nie mówisz mu, skąd dzwoniłeś.
Rozpoczęcie działania jest asynchronicznym analogiem wywołania metody, w którym to przypadku wynik zostanie uzyskany w specjalnej metodzie onActivityResult (). W tej metodzie musisz wiedzieć, co zrobić z właśnie otrzymanym wynikiem i masz do tego kod żądania.
Aby wyjaśnić nieco, dlaczego przekazywanie kodu żądania jako parametru nie jest dobrym pomysłem, rozważ przykładową czynność, która pokazuje produkt, który można kupić. W tym działaniu znajdują się dwa przyciski oznaczone „Kup” i „Zaloguj się” (ponieważ obecnie nie jesteś zalogowany). Naciśnięcie „Zaloguj” rozpocznie czynność o nazwie „Logowanie”, która spróbuje zalogować użytkownika przy użyciu podanych informacji. Naciśnięcie „Kup” uruchomi najpierw tę samą czynność „Zaloguj się”, a jeśli logowanie się powiodło, rozpocznie czynność kupowania.
Teraz przycisk „Zaloguj się” używa kodu żądania 1 do rozpoczęcia czynności logowania, ale przycisk „Kup” nie może używać tego samego kodu żądania, ponieważ będzie musiał zrobić coś innego, jeśli logowanie się powiedzie. Tak więc przycisk „Kup” używa kodu żądania 2.
W aktywności „Logowanie” możesz otrzymać dwa różne kody żądań w zależności od tego, skąd dzwoniono, ale będziesz musiał wykonać tę samą procedurę.
Tak więc, jeśli przekażesz kod żądania jako parametr, otrzymasz kod, który musi wykonać to samo dla kilku różnych kodów żądań, takich jak:
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
Skończy się również na przechowywaniu stałych kodu żądania w centralnej lokalizacji, np. W klasie o nazwie RequestCodes.
Krótko mówiąc, kod żądania powinien być używany tylko do podjęcia decyzji, co zrobić z otrzymanym wynikiem. W ten sposób otrzymasz bardziej modułowy, łatwiejszy w utrzymaniu i łatwiejszy do rozszerzenia kod.