Jak inni napisali, onActivityResult() jest wywoływana przed onResume() podczas swojej aktywność jest restartowana.
Diane Hackborn wyjaśnia, że funkcja onActivityResult() jest wywoływana przed onResume() w celu umożliwienia otrzymywania wszystkiego, co może wpływać na interfejs użytkownika i jest dostępne przed aktualizacją interfejsu użytkownika (prawdopodobnie w celu uniknięcia podwójnej aktualizacji - raz w onResume()) bez zwracanego wyniku, a następnie w onActivityResult(), dodając zwracany wynik).
https://groups.google.com/forum/?fromgroups=#!topic/android-developers/3epIML7fjGw
Jedną z konsekwencji jest to, że wszelkie pliki uruchamiania może zdecydowałeś się wykonać tylko w onResume() (na przykład pliki uruchamiania danych z zewnętrznego źródła, które trzeba być świeże), a nie w onCreate (), byłoby niezainicjalizowane, gdy wywołanie funkcji onActivityResult() wystąpi w ramach restartowania aplikacji, która została opróżniona z pamięci przez system operacyjny (ponieważ funkcja onResume() nie zostałaby wywołana przed funkcją onActivityResult()).
W tej sytuacji funkcja onActivityResult() musiałaby być przygotowana do wykonywania takich inicjalizacji dla dowolnych zmiennych, które są używane przez onActivityResult().
Oczywiście, jeżeli inicjalizacje potrzebne do działania onActivityResult() mogą być wykonywane w onCreate(), a nie w onResume(), wówczas metoda onCreate() zostanie wywołana przy ponownym uruchomieniu przed trybami onActivityResult() i onResume(), byłby to najłatwiejszy sposób na znalezienie rzeczy, których nie musisz robić za każdym razem, gdy aplikacja jest wznawiana. Jeśli jednak dane, które inicjujesz, pochodzą ze źródła zewnętrznego i chcesz, aby był on świeży, możesz zainicjować takie dane zarówno w trybie onCreate(), jak i onResume(), z onResume() sprawdzając flagę ustawioną w onCreate(), aby sprawdzić, czy dane właśnie zostały zainicjowane w onCreate), a następnie aktualizować je w onResume() tylko wtedy, gdy nie były. W ten sposób niektóre z nich będą zawsze dostępne (przynajmniej od czasu, kiedy aplikacja została wznowiona).
Innym sposobem radzenia sobie z tym problemem jest przechowywanie informacji zwróconych przez onActivityResult() w zmiennych, które zostaną pobrane przez onResume() i przetworzone w tym miejscu (po przeprowadzeniu jakichkolwiek wymaganych inicjalizacji przez onResume()), zamiast przetwarzanie w obrębie samego obiektu onActivityResult().
Jest to funkcja bardzo krótko udokumentowana, bez żadnych wyjaśnień ani ostrzeżeń (w oficjalnych dokumentach) dotyczących konsekwencji tego nieoczekiwanego sekwencjonowania. Bardzo łatwo jest również przeoczyć problem podczas testowania, ponieważ na urządzeniu z dużą ilością pamięci, na którym nie działa wiele aplikacji, działanie wywołujące funkcję startActivityForResult() (lub jej warianty) może nigdy nie zostać przepłukane z pamięci podczas oczekiwania na uruchomił działanie, aby zwrócić wynik przez onActivityResult(), a zatem wszystkie inicjalizacje wykonane przez onResume() będą już dostępne, a zatem problem może nie zostać wykryty.
Jest informacyjny badanie niektóre z problemów związanych z tym sekwencjonowanie (łącznie z ostrzeżeniem dotyczącym próby wykorzystania obiektu Application o aplikacji do ochrony zmienne z jej efektów), wraz z UML diagram sekwencji rysowane ręcznie, tutaj:
http://steveliles.github.com/android_activity_lifecycle_gotcha.html
W tej chwili mój kod wydaje się wywoływaćActivityResult bezpośrednio przed * onRestart *: -/ –
Te diagramy mogą być przydatne do zrozumienia pełnego cyklu życia aktywności i fragmentu: https: // github.com/xxv/android-lifecycle – Sergii