2014-09-15 28 views
5

To jest pytanie uzupełniające do jednego z moich previous questions.Jak długo klasy z metodami statycznymi działają w systemie Android?

Mam funkcję LoadingActivity, która ładuje niektóre grafiki potrzebne do wszystkich działań i zapisuje je w klasie statycznej. Próbuję nie ładować ponownie akcji LoadingActivity po naciśnięciu przycisku HOME i wznowieniu aplikacji, ponieważ zajmuje ona dużo pamięci i kończy się po kilkukrotnym obciążeniu grafiki, więc nie trzeba ponownie uruchamiać funkcji LoadingActivity. Moje pytanie brzmi: jak długo trwa klasa statyczna? Czy mogę polegać na jego dostępności po wznowieniu aplikacji, czy może to być może to tutaj, ponieważ Android zabija go z powodu problemów z pamięcią, czy jest zawsze tutaj, tak długo, jak działa vm (to znaczy tak długo, jak telefon działa)?

+0

Uważam, że trwają tak długo, jak długo proces składania podania pozostaje żywy. Ale utrzymywanie referencji obiektów jako statycznych nigdy nie jest dobrym pomysłem w tworzeniu aplikacji, gdzie pamięć urządzenia jest ograniczona. – waqaslam

+2

Klasy statyczne są powiązane z cyklem życia samej aplikacji, która jest na apetyt Androida AFAIK. NIGDY nie polegaj na klasach statycznych. Kropka. – Machinarius

+0

Przez "klasę statyczną" rozumiesz odniesienia do "obiektów statycznych"? Możesz wyjaśnić ... brzmi to tak, jakbyś pytał o klasy zadeklarowane za pomocą 'klasy statycznej'. –

Odpowiedz

6

Jak wskazuje Simon, "klasa statyczna" oznacza różne rzeczy w różnych językach, a Java nie ma niczego podobnego do klas statycznych w niektórych innych językach. Ale nie sądzę, że o tym mówisz. Wygląda na to, że pytasz, czy obiekty odwołujące się do silnych odniesień statycznych mogą być zbędne. Jeśli tak, odpowiedź brzmi: nie.

Klasa jest reprezentowana przez obiekt klasy Class, który jest osiągalny poprzez jego ClassLoader. Wszystko, o czym wspomina Class, będzie więc osiągalne tak długo, jak długo będzie dostępne ClassLoader, które w przypadku programu ładującego klasy systemu jest tak długie, jak istnieje maszyna wirtualna Java/Dalvik. Ale to jest nie tak długo, jak telefon działa, ponieważ dla każdej aplikacji tworzona jest niezależna maszyna wirtualna. Cały proces i maszyna wirtualna, w której działa aplikacja, mogą zostać uśmiercone za każdym razem, gdy aplikacja jest w tle. Po powrocie do aplikacji jego klasy zostaną ponownie załadowane.

Jeżeli pola statyczne są naprawdę najlepszy wybór, w przeciwieństwie do ContentProvider lub foregound Service, a następnie za każdym razem aplikacja wznawia trzeba będzie sprawdzić, czy odnośników statyczne zostały zainicjowane i ponownie zainicjować je, jeśli są puste.

+0

To jest po prostu złe. Nie ma czegoś takiego jak klasa statyczna, chyba że odnosisz się do statycznej wewnętrznej klasy wewnątrz obiektu. Czy mówisz o POJO lub działaniach ze statycznymi referencjami? Lub statycznie zainicjalizowane pola klas? Ponieważ Java nie ma klas statycznych, głosuję za nią, dopóki nie wyjaśnisz. – Simon

+0

Wyjaśnienie. **** –

+0

Teoretycznie dana klasa ClassLoader i wszystkie ładowane przez nią klasy mogą zostać rozładowane przez maszynę wirtualną. Aplikacje na Androida są ładowane za pomocą niestandardowego programu ładującego, a nie programu ładującego "system". W praktyce Dalvik nie rozładowuje klas, więc jest to kwestią dyskusyjną. – fadden