Singletony a kontekst aplikacji w Androidzie?
Przypomnienie tego post wyliczenie kilku problemów z używaniem singletonów po obejrzeniu kilku przykładów aplikacji na Androida wykorzystujących wzorzec singleton, zastanawiam się, czy dobrym pomysłem jest używanie singletonów zamiast pojedynczych instancji udostępnianych przez globalny stan aplikacji (podklasowanie Androida.os.Zastosowanie i uzyskanie go poprzez kontekst.getApplication ()).
Jakie zalety / wady miałyby oba mechanizmy?
Szczerze mówiąc, oczekuję tej samej odpowiedzi w tym post Singleton pattern with Web application, Not a good idea! ale zastosowany do Androida. Mam rację? Czym różni się DalvikVM inaczej?
EDIT: chciałbym mieć opinie na temat kilku aspektów:
- Synchronizacja
- Reusability
- testowanie
1 answers
Nie zgadzam się z odpowiedzią Dianne Hackborn. Krok po kroku usuwamy wszystkie singletony z naszego projektu na rzecz lekkich, zadaniowych obiektów, które można łatwo odtworzyć, gdy naprawdę ich potrzebujesz.
Singletony są koszmarem testowania i, jeśli leniwie zainicjowane, wprowadzą "indeterminizm stanu" z subtelnymi efektami ubocznymi (które mogą nagle pojawić się podczas przenoszenia wywołań do getInstance()
z jednego zakresu do drugiego). Widoczność została wymieniona jako inny problem, a ponieważ singletony implikują "Globalny" (=random) dostęp do współdzielonego stanu, mogą pojawić się subtelne błędy, gdy nie są prawidłowo zsynchronizowane w aplikacjach współbieżnych.
Uważam to za anty-wzorzec, to zły obiektowy styl, który zasadniczo sprowadza się do utrzymania stanu globalnego.
Aby wrócić do twojego pytania:
Mimo że kontekst aplikacji może być uważany za singleton, jest zarządzany przez framework i ma dobrze zdefiniowany cykl życia ]}, zakres i ścieżka dostępu. Dlatego uważam, że jeśli trzeba zarządzać app-global stan, powinien iść tutaj, nigdzie indziej. Jeśli chodzi o cokolwiek innego, zastanów się, czy naprawdę potrzebujesz obiektu singleton, lub czy możliwe jest również przepisanie klasy singleton, aby zamiast tego utworzyć instancję małych, krótkotrwałych obiektów, które wykonują zadanie pod ręką.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 15:24:43