2013-07-17 22 views
5

Chciałbym poznać podstawowe rzeczy:Jak skutecznie używać zmiennych statycznych?

Pracuję nad aplikacją na Androida, która prowadzi mnie do zagadnień związanych z zarządzaniem pamięcią. Niedawno oglądałem film związany z zarządzaniem pamięcią przez google Stwierdziłem, że używanie zmiennej statycznej w działaniu powoduje wycieki pamięci nawet w orientacyjnej zmianie aktywności, ponieważ utrzymuje odniesienia do innych obiektów w działaniu, Człowiek w filmie powiedział, że przy użyciu statycznego obiektu zmienna za pomocą metody statycznej rozwiąże problem, lubię wiedzieć, jak statyczna metoda rozwiąże problem?

Chciałbym poznać najlepszy sposób użycia zmiennej statycznej w mojej aplikacji, na przykład mam globalną klasę, w której przechowuje się pewne zmienne statyczne, ponieważ jej nazwa wskazuje, że te wartości będą oceniane i modyfikowane przez różne działania, Jako przykładem mam statycznej zmiennej szerokości, a obecnie zaktualizować go jak ten

Global.WIDTH = 12

lub otrzymać go jak int width = Global.WIDTH z różnych aktywnosci, jest to właściwa metoda, czy muszę używać statycznego metoda do zdobycia szerokość jak int width = Global.getWidth();, to jaka jest różnica między obu tych, co jest najlepszym sposobem, aby to zrobić,

jakie są inne ważne rzeczy, musimy pamiętać, gdy mamy do czynienia ze zmiennych statycznych?

Dziękuję wszystkim i przepraszam za długiego opisu ...

+0

Użyj słowa "static", gdy pole/metoda musi należeć do klasy, a nie do żadnego odwołania do obiektu. Jeśli użyjesz go w 'Activity's, poleciłbym użyć' static finał', aby zadeklarować pole jako stałą zamiast mieć zwykłe dzikie 'static' pole tam. –

+0

Dziękuję za szybką odpowiedź. Nie mogę zadeklarować jej jako ostatecznej, ponieważ jej wartość zmieni się zgodnie z urządzeniem opartym na obliczeniu. –

+1

Możesz zadeklarować je jako 'static final' i zdefiniować wartości w metodzie' static {} '. Zauważ, że te wartości, nawet jeśli są * dynamiczne *, * powinny * być ładowane tylko raz w uruchomieniu aplikacji, a nie w dowolnym momencie aplikacji. Jeśli chcesz mieć inną szerokość i wysokość do wizualizacji krajobrazu, dodaj dwa dodatkowe pola zamiast przeliczać wartości. –

Odpowiedz

1

Zmienne statyczne mogą spowodować wycieki pamięci, ponieważ nigdy nie wychodzą z zakresu, ale jeśli masz tylko kilka prymitywów takich jak int lub długo wtedy nie będziesz miał problemu.

Musisz zachować ostrożność, jeśli zaczniesz odwoływać się do obiektów w zmiennych statycznych, szczególnie w kolekcjach. Jeśli kolekcja nigdy nie wykracza poza zakres, ani nie zawiera żadnych obiektów w niej zawartych, ani nie robi żadnych obiektów, do których się odnoszą, więc istnieje szansa, że ​​kolekcja będzie nadal rosnąć i zużywać więcej pamięci.

Zmienna w twoim pytaniu, prawdopodobnie int, będzie OK.

+0

Dziękuję Nick za odpowiedź, użyłem int dla przykładu, chciałbym wiedzieć czy istnieje jakaś różnica między użyciem pól statycznych i metod statycznych. –

+1

Nie mogę wymyślić żadnych implikacji związanych z pamięcią przy użyciu metod statycznych . Jedyną różnicą między Global.width i Global.getWidth() jest to, że metoda pozwoli ci obliczyć wartość po wywołaniu. Wszystkie zmienne zadeklarowane i użyte w metodzie nie spowodują przecieku pamięci, ponieważ wykraczają poza zakres, gdy tylko metoda się zakończy. – NickJ

Powiązane problemy