Moja rekomendacja jest ogólnie taka, jak w normalnych warunkach. Android zignorować i po prostu zrobić normalnego rodzaju rzeczy tak:
class Singleton {
static Singleton sInstance;
static Singleton getInstance() {
// NOTE, not thread safe! Use a lock if
// this will be called from outside the main thread.
if (sInstance == null) {
sInstance = new Singleton();
}
return sInstance;
}
}
Teraz nazywają Singleton.getInstance() w miejscu, gdzie jest to potrzebne. Twój singleton zostanie utworzony w tym momencie i będzie ponownie użyty tak długo, jak długo twój proces będzie istnieć. Jest to dobre podejście, ponieważ pozwala na leniwe przydzielanie singletonom (tylko wtedy, gdy są one potrzebne), zamiast wykonywać kilka prac z góry za rzeczy, których od razu możesz nie potrzebować, co powoduje twoje uruchomienie (a tym samym reakcję na użytkownik) cierpieć. Pomaga to również w utrzymaniu kodu w czystości, wszystko o swoim singletonie i jego zarządzaniu znajduje się w jego własnym miejscu i nie zależy od jakiegoś globalnego miejsca uruchamiania aplikacji, aby ją zainicjować.
Także jeśli trzeba kontekście, w swojej pojedyncza:
class Singleton {
private final Context mContext;
static Singleton sInstance;
static Singleton getInstance(Context context) {
// NOTE, not thread safe! Use a lock if
// this will be called from outside the main thread.
if (sInstance == null) {
sInstance = new Singleton(context);
}
return sInstance;
}
private Singleton(Context context) {
// Be sure to use the application context, since this
// object will remain around for the lifetime of the
// application process.
mContext = context.getApplicationContext();
}
}
Odradzam używanie singletonu. Nie rozumiem, dlaczego "naprawdę żałujesz, że wprowadziłeś aplikację" '. Możesz napisać zły kod w obie strony, a dzięki singletonowi jest o wiele łatwiej. Kod używający singletonów nie jest łatwy do sprawdzenia. Dostęp do singletonu można uzyskać z dowolnego miejsca, co czasami prowadzi do takich zastosowań jak 'Singleton.getInstance (null)', ponieważ programista jest "pewny", że został już zainicjowany przez pierwsze "Działanie". Z drugiej strony podklasa "Application" tworzy strukturę, której nie da się tak łatwo zepsuć. Uzyskujesz dostęp do modelu i inicjujesz go leniwie, jeśli go tam nie ma. –
@hackbod robi rachunek pugh * Inicjalizacja na żądanie Idiom właściciela * pomoc singletona czy nie jest to istotne dla Androida? opisane w Wikipedii 'public class Singleton { \t // Prywatny konstruktor uniemożliwia instancji z innych klas \t prywatnych Singleton() {} \t/** \t * SingletonHolder ładowany jest na pierwszym wykonaniem Singleton.getInstance() \t * lub pierwszy dostęp do SingletonHolder.INSTANCE, nie wcześniej. \t */ \t prywatna klasa statyczna SingletonHolder { \t \t prywatne statyczne końcowe Singleton INSTANCE = new Singleton(); \t} \t publiczne statyczny Singleton getInstance() {SingletonHolder.INSTANCE \t \t powrotu; \t} } ' – likejiujitsu