2013-06-04 14 views
10

W Android documentation we have:Implementacja metod cyklu życia w systemie Android może wywołać implementację nadklasy po wykonaniu jakiejkolwiek pracy?

Uwaga: Twój wdrożenie tych metod cyklu życia zawsze musi wywołać nadklasą wdrożenie przed rozpoczęciem jakichkolwiek prac ...

Ale widziałem przypadki, w których kod jest umieszczone po metody nadklasy, zwłaszcza w przypadku metod, takich jak OnPause OnStop()(), onDestroy(), na przykład:

@Override 
protected void onPause() { 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    super.onPause(); 
} 

http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html#ownreceiver_localbroadcastmanager

W obu przypadkach działa. Jaka jest różnica między umieszczeniem kodu przed o po wywołaniu metody nadklasy? Jaki jest właściwy sposób?

Odpowiedz

15

Bezpośrednio skopiowany z CommonsWare's this answer. Więc lepiej dać mu upvote

Formy przesłonić które są częścią stworzenia komponentu (onCreate(), onStart(), onResume(), itd.), Należy łańcuch do nadklasy jako pierwsze pismo, w celu zapewnienia, że ​​Android ma jego szansa na wykonanie swojej pracy, zanim podejmiesz próbę zrobienia czegoś, co zależy od wykonania tej pracy.

Metody przesłonić które są częścią komponentu zniszczenia (onPause(), onStop(), onDestroy(), etc.), należy zrobić swoją pracę pierwszy i łańcuch do nadklasy jako ostatnią rzeczą. W ten sposób, w przypadku, gdy Android sprząta coś, od czego zależy twoja praca, wykonasz najpierw swoją pracę.

Metody zwracające coś innego niż void (onCreateOptionsMenu(), etc.), czasem łańcuch do nadklasy w instrukcji return, zakładając, że nie są specjalnie robi coś, co musi wymusić określoną wartość powrotną.

Cała reszta - taka jak onActivityResult() - należy do Ciebie, na całość. Zwykle łączę się z nadklasą jako pierwszą, ale jeśli nie masz problemów, późniejsze łańcuchy powinny być w porządku.

Ale jeśli nie ma zależności, wywołaj metody nadklasy gdziekolwiek chcesz.

6

Kiedy zainteresowany o tym problemie, znalazłem tę regułę:

during any kind of initialization, let the super class do their work first; 
during any kind of finalization, you do your work first 

Jest to logiczne)

1

Według standardów Java i najlepszych praktyk, wywołanie super powinien iść pierwszy. Uważam, że powodem może być praca, która musi być wykonana w super, która mogłaby spowodować problemy w kodzie, gdybyś tego nie zrobił pierwszy.

Jednak wykonałem pracę przed wywołaniem super i nie miałem żadnych problemów.

nie mam żadnych przykładów ramowych ale mam klasę BaseActivity który extends Activity i wszyscy moi Activities przedłużenia BaseActivity. Mam kilka metod, które muszą być wdrożone w tych podklas. Jeśli nie nawiążę najpierw połączenia z super, niektóre zmienne nie zostaną zainicjalizowane, więc muszę je uzyskać, aby uzyskać s

Powiązane problemy