2013-08-30 11 views
8

Mam problemy z zastosowaniem koncepcji dziedziczenia w działaniach Android - np. ActivityA extends Activity i ActivityB extends ActivityA, następnie jeśli uruchomię z aktywnościąB, wówczas zostanie wywołana metoda onCreate() dla zarówno Działania (A, a następnie B).Dziedziczenie między działaniami w Androidzie

Moje pytanie brzmi, w typowej Java, onCreate z ActvityA powinien być nadpisany - ale onCreate raczej zachowuje się jak konstruktor, mimo że jest to funkcja. W jaki sposób dziedziczenie działa w systemie Android, zwł. inne funkcje, takie jak onPause(), onResume itp.?

EDYCJA: Zauważyłem również, że ActivityA może mieć wiele abstrakcyjnych metod wywoływanych w jego onCreate(), którego definicje są podane w ActivityB. Jak to działa ?

+0

tak, jest to możliwe –

+0

'esp. czy inne funkcje państwowe? 'zdefiniuj to zdanie. Nie rozumiem tego. –

+0

+1 za miłe pytanie. !! – MKJParekh

Odpowiedz

6

Jeśli masz swoją aktywność podstawową, a następnie rozszerzyć ją jak tak Activity ->Activity A oznacza to, że gdy onCreate z Activity A nazywa i zadzwonić super.onCreate(); następnie metodą pierwotnej ActivityonCreate() jest również tzw.

Jeśli następnie rozszerzyć Activity A do Activity B wywołania pracować jak tak ...

Activity B.onCreate() - super.onCreate(); ->Activity A.onCreate() - super.onCreate() ->Activity.onCreate().

Nie jest to konstruktor, jest to metoda, która jest wywoływana w celu utworzenia Activities. Jeśli następnie rozszerzysz je z innego Activities, jego nadklasa zostanie wywołana poprzez jego metodę super. To nie znaczy, że odziedziczone z Activities również zostaną stworzone. Activity B zostanie utworzony Activity.

EDIT:This page na stronie Android Developer jest bardzo użyteczne, ponieważ wizualnie wyjaśnia Android cykl aktywności.

+1

Chciałbym także zwrócić uwagę, że powodem, dla którego 'onCreate' ma być zamiast konstruktora, jest to, że przy zmianie orientacji obiekt nie powinien być rekonstruowany. –

+0

ahh .. jak bardzo tęskniłem za super.onCreate() i czy mógłbyś również wyjaśnić, jak działają metody abstrakcyjne (zmieniłem pytanie)? – AndroidLearnMachine

+0

@AndroidLearnMachine, o jakich metodach mówisz? – StuStirling

1

Tak, jako typowa funkcja java naCreate powinna być dziedziczona, ale nie dostaje: dlaczego? - ponieważ to nie tylko metoda, to etap cyklu życia.

AFAIK, Activity to nie tylko klasa java, ale jest to specjalny rodzaj klasy JAVA, która ma swój własny cykl życia, a etapy cyklu życia mają się nazywać za każdym razem, gdy używasz tej klasy/aktywności, nawet jeśli zadeklarowali lub nie te metody onCreate(), onPause() itp. zostaje wywołana na pewno.

Za każdym razem, gdy aktywność podstawowa zostanie utworzona i zniszczona. Taka jest natura.

Jeśli masz z tym problem, spróbuj użyć klas abstrakcyjnych, interfejsów i dowolnej innej klasy publicznej, aby mieć wspólny kod dziedziczony we wszystkich działaniach.

Powiązane problemy