Skocz do zawartości
hopbit

Cykl życia aktywności.

    Rekomendowane odpowiedzi

    hopbit

    Myślę, że to pytanie do bardziej doświadczonych programistów tej platformy :)

    Jedyną metodą, która ma 'zagwarantowane wykonanie' zanim aktywność przejdzie do stanu w którym może być zabita w każej chwili jest metoda onPause(). Można ją wykorzystać np. do zapisu zmienionych danych lub aktualnego stanu. Pozostałe metody - onStop i onDestroy, z tego co wyczytałem i zrozumiałem do tej pory nie mają 'gwaracji' wykonania'. Moje pytanie - co można umieścić w tych metodach, do czego mogą się przyda

    ć, skoro nie wiadomo nawet, czy kod w nich zawarty zostanie w ogóle wykonany? Jakoś nie potrafię sobie tego wyobrazić. Do tej pory zajmowałem się głównie aplikacjami sieciowymi typu klient-serwer i może z tego względu nie potrafię wyobrazić sobie dobrego zastosowania dla tych metod? Mam takie wrażenie, że one są bo są...

    Moje (niewielkie) doświadczenie w temacie:

    Dotychczas stworzyłem X prostych aplikacji (głównie na podstawie tutoriali i książek) oraz pracuję nad jedną własną. Podejrzewam, że z upływem czasu, podczas pisania kolejnych aplikacji i dalszego czytania kodu innych aplikacji (dostępnych chociażby na stronach projektu Android) znajdę odpowiedź na moje pytanie. Ale liczę, że może ktoś nakieruje mnie wcześniej na włąściwą odpowiedź, bądź kod aplikacji, gdzie będzie można zobaczyć 'jak to jest zrobione' i mi się 'rozjaśni' :)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    onPause() wykonywane jest kiedy aktywność jest "minimalizowana" (guzik z domkiem) lub kiedy jest zamykana (guzik wstecz) lub kiedy aktywność zostanie zepchnięta na plan dalszy ("zminimalizowana" na siłę) np: inna aktywność wyskoczy na wierzch lub kiedy telefon jest usypiany, wykonaniu onPause() w niektórych sytuacjach można zapobiec, onDestroy() wykonywany jest kiedy wychodzisz z aktywność (guzik wstecz) nie zostanie wykonane kiedy zminimalizowana, wepchnięta na dalszy plan aktywność zostanie zabita, zawsze najpierw jest wywołana onPause() a potem onDestroy()

    najlepiej jest polegać na onPause i onResume a w celu wykrycia zamknięcia aktywności isFinishing(), oraz trzeba się liczyć ze "zminimalzowana" aktywność możne zostać zabita bez uprzedzenia

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    hopbit

    Czyli rozumiem, że wykonanie pewnych metod cyklu życia aktywności wiąże się z 'odpowiedzią' na działania użytkownika lub zdarzenia pojawiające się w systemie?

    Nadal nie bardzo jestem pewien co 'pożytecznego' można zrobić implementując metody onStop i onDestroy. Z tego co doczytałem, to jeśli mamy odpalony serwis, lub jakieś inne zadanie, dajmy na to jakąś animację 3d, czy czytanie danych z jakiegoś strumienia, to w onStop dobrze jest je 'zatrzymać' to zadanie celem zwolnienia zajmowanych zasobów np. oszczędność baterii poprzez to, że procesor będzie mniej obciążony? Wydaje mi się, że zmierzam w dobrym kierunku.

    @zawadaki

    Dzięki za szybką odpowiedź

    Edytowane przez hopbit
    tnx 4 zawadaki

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    To, że jakieś metody są zaimplementowane w Activity, nie oznacza jeszcze, że ktokolwiek wie po co one są (włączając w to autorów). Właśnie zetknąłeś się z genialną dokumentacją ADK - niby wszystko jest opisane, a jak chcesz wiedzieć o co chodzi, to pozostaje wróżka :)

    Niestety przykładów jak coś użyć w poprawny sposób jest jak na lekarstwo.

    Z tego co wiem onPause() jest wykonywana np. wtedy, jeżeli wyświetlisz dialog - teoretycznie system jest w stanie ubić aktywność w tym stanie, jednak w praktyce chyba się to nie zdarza (oczywiście jeżeli nie zaczniesz w wyświetlonym dialogu liczyć nagle liczby Pi) - onStop() jest wywoływane kiedy aplikacja przestaje być widoczna na ekranie - w 99% przypadków, ta metoda zostanie wykonana przed zakończeniem życia Activity. Dla odmiany onDestroy() wykonywana będzie bardzo rzadko.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    (...) Właśnie zetknąłeś się z genialną dokumentacją ADK - niby wszystko jest opisane, a jak chcesz wiedzieć o co chodzi, to pozostaje wróżka :)

    Niestety przykładów jak coś użyć w poprawny sposób jest jak na lekarstwo. (...)

    Mam ten sam problem, a jakoś o wróżkę ciężko ;) . Mnie z reguły pomaga analiza kodu źródłowego i w przypadku ADK też mi sporo to pomogło. A źródła łatwo można znaleźć tutaj: GrepCode: android - Source Code View

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    najlepiej jest przyjąć zasadę że czynności długotrwałe lub takie które wymagają posprzątania umieszczasz w Service a Activity używasz jako GUI, zdarzenia uruchamianie i zatrzymania Service są dokładnie udokumentowane i można być ich pewnym, nie są zależne od cyklu pracy urządzania aktywności użytkownika (chyba ze programista zadecyduje inaczej) itd...

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    hopbit
    To by się zgadzało z dokumentacją.

    BTW: jest możliwość debugowania kilku aplikacji na raz? Np. tworzę aplikację A, implementuję w niej wszystkie metody cyklu życia, w których coś tam robię, potem do samo tylko, że nowa aplikacja, np. B. W sumie to chyba wystarczyłaby nawet jedna aplikacja z kilkoma aktywnościami.... Aż zaraz sprawdzę z ciekawośći.

    AVD z automatu odpala nowy emulator, ale można wybrać manualnie, w którym emulatorze aplikacja ma się odpalić. Wtedy ładnie widać kolejność wywołania poczególnych metod w przypadku pracy z większą ilością aplikacji. I to chyba najlepsza metoda na zrozumienie co, jak i kiedy jest wywoływane (chodzi o poszczególne metody cyklu życia komponentów). Tylko trzeba mi będzie odpalić 'cięższe p

    Praca w kontekście uwzględniającym to, że moja aplikacja nie jest 'jedyną' to dla mnie coś nowego ;)

    Edytowane przez hopbit
    wyjaśniło się.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x