2013-03-10 9 views
8

Mam ogólne pytanie dotyczące wydajności, a które mam zrobić i którego nie powinienem używać. Używam w mojej aplikacji dwóch działań, nazwijmy działanie "pierwszy" i "drugi odcinek".publiczna zmienna statyczna lub użyj metody putExtra z klasy intencji

W pierwszym działaniu mam publiczny obiekt statyczny, w moim przypadku jest to lista niestandardowego obiektu wykonanego przeze mnie, zwanego Koniunkcja.

Kiedy dzwonię do aktywności "Drugiej", chcę uzyskać zawartość tej listy. Czy powinienem używać publicznej zmiennej statycznej? czy jest jakiś problem? Będzie tylko jeden przypadek pierwszego działania? Więc nie ma problemu z używaniem publicznej zmiennej statycznej ..? Zgaduję.

Czy powinienem obliczyć całą listę i umieścić informacje na dużym Łańcuchu i wysłać go do aktywności "Drugiej" za pomocą metody putExtra?

dobre wyjaśnienie w tej sprawie byłoby bardzo dobre i będę naprawdę wdzięczny, że nie :)

+2

Korzystanie z wzorca singleton jest ogólnie lepsze niż publiczne pola statyczne. –

Odpowiedz

11

Używanie zmiennych statycznych nie jest zalecane. Zmienne statyczne są przechowywane w sekcji sterty. Nawet jeśli kończy się działanie klasy, zmienne statyczne pozostają w stercie. Śmieciarz nie zaznacza i nie zamiata. Jeśli masz zmienne statyczne w 1. działaniu, które jest wymienione w drugim działaniu, link pozostaje długi. Możesz dostać wycieki pamięci, jeśli używasz więcej zmiennych statycznych. Zmniejsz także użycie niepotrzebnych obiektów.

Do zmiennych statycznych odwołują się obiekty klasy, do których odwołuje się ClassLoaders -so, chyba że ClassLoader w jakiś sposób upuści klasę lub sama ClassLoader stanie się uprawniona do usuwania śmieci, zmienne statyczne nie zostaną usunięte. Więc jeśli używasz zmiennych statycznych, do których odniesienia znajdują się w wielu klasach, te klasy i te, w których deklarowane są zmienne statyczne, nie mogą być zbędne, chyba że te klasy są dostępne do czyszczenia pamięci. Prowadzi to do rozszerzenia pamięci sterty, prowadząc do wycieków pamięci.

Polecam używanie puExtra dla typów prymitywów. W twoim przypadku użycie singletonu powinno pomóc.

W tym filmie facet mówi, dlaczego zmienne statyczne nie powinny być używane i jak uniknąć wycieków pamięci. http://www.youtube.com/watch?v=_CruQY55HOk. Facet mówi o użyciu MAT Analyzer, aby sprawdzić wycieki pamięci.

Zobacz także ten link. http://developer.android.com/guide/faq/framework.html .Przeglądnij szczegóły pod nagłówkiem * Jak przekazywać dane między działaniami/usługami w ramach pojedynczej aplikacji ?.

+1

Ten ostatni link ma bardzo dobre informacje, dzięki za udostępnienie go. Używam teraz putExtra, obliczyłem ciąg znaków, a następnie wstawiłem String za pomocą putExtra, a następnie wywołałem działanie. Myślę, że to dobre rozwiązanie na razie :) Dzięki mate;) – TiagoM

+1

Cieszę się, że ci pomogło. – Raghunandan

1

publiczne statyczny jest dobrym pomysłem. Funkcja "The First" może w niektórych przypadkach zostać zakończona przez system. Przejść: Activity Lifecycle może pomóc Ci w działaniu.

Lepiej użyj putExtra nie tak naprawdę jako napisu, ale również spójrz na putExtra dla obiektu Parselable lub Serializable. see here for serializable

+0

Acitivy Lifecycle ma sporo dobrych informacji, po prostu zajrzałem do niego i jest bardzo dobry, dzięki bardzo dużo partnerowi;) Używam putExtra. dzięki;) – TiagoM

Powiązane problemy