Rozumiem, że Android Activities
ma określone cykle życia i onCreate
należy to zastąpić i użyć do inicjalizacji, ale co dokładnie dzieje się w konstruktorze? Czy są jakieś przypadki, w których można / należy również zastąpić Activity
konstruktora, czy też nie należy go nigdy dotykać?
Zakładam, że konstruktor nigdy nie powinien być używany, ponieważ odwołania do Activities
nie są całkowicie oczyszczone (w ten sposób utrudniają działanie modułu odśmiecającego) i to onDestroy
jest w tym celu. Czy to jest poprawne?
java
android
garbage-collection
android-activity
oncreate
ubóstwiać
źródło
źródło
Odpowiedzi:
Nie przychodzi mi do głowy żaden dobry powód, żeby cokolwiek robić w konstruktorze. Nigdy nie konstruujesz działania bezpośrednio, więc nie możesz go użyć do przekazania parametrów. Ogólnie rzecz biorąc, po prostu rób rzeczy w onCreate.
źródło
Dobrym powodem umieszczania rzeczy w konstruktorze, jak stwierdził komentarz Gili, jest użycie końcowych pól.
Jeśli jednak zainicjujesz rzeczy w konstruktorze, żywotność obiektu będzie trochę dłuższa, chociaż nie myślę o tym zbyt wiele, ponieważ
onCreate
zostanie wywołany wkrótce potem.Mimo to wbrew moim ideałem, mam unikać konstruktora do inicjalizacji członków aktywności i polegać na
onResume()
ionPause()
zasobów, że moja aplikacja do czynienia.Dla
onCreate()
Zwykle używam go zrobić widok mapowanie do zmiennych lokalnych. Chociaż adnotacje na Androida już to robią, rzadko mamonCreate()
metodę dla mojej aktywności. Jednak nadal używam go w usłudze.Jeśli jednak spojrzysz na członków, być może inicjujesz
mieliby metodę „zamknij”, którą należy wywołać we właściwym czasie (onResume lub onPause)
byłyby częścią widoku, co oznacza, że należy go zainicjować, a następnie wywołać onCreate
są to stałe, których i tak nie trzeba umieszczać w konstruktorze, wystarczyłoby tylko statyczne zakończenie. Obejmuje to stałe Paint i Path, które mogą być inicjowane przez blok statyczny
źródło
Jestem teraz w sprawie, która musi zastąpić konstruktora. W rzeczywistości mam kilka działań, które mają taką samą strukturę. Więc zamiast tworzyć wiele działań, utworzę jedno działanie „nadrzędne”, a pozostałe odziedziczą to. Dlatego muszę przesłonić konstruktora działania podrzędnego, aby móc zainicjować niektóre zmienne, które będą używane w metodach oncreate.
W dwóch słowach, konstruktor sprawia, że symulujesz „działanie nadrzędne”, które można ponownie wykorzystać w drodze dziedziczenia!
źródło
Musisz nadpisać Konstruktora, gdy twoje działanie będzie miało niestandardowe parametry lub chcesz śledzić wywołania z klas, które odziedziczyły.
źródło
startActivityForResult
, muszę dołączyć prywatnego konstruktora do mojego komponentu niestandardowego, nawet jeśli ta aktywność nigdy nie zostanie uruchomiona i nie ma widocznych elementów, po prostu używam jej jako wyniku.