Voici ma classe singleton avec une référence faible.Singleton Java avec référence faible
public class HandheldMapViewProvider {
private static WeakReference<HandheldMapViewProvider> mInstance = null;
private HandheldMapViewProvider(){
}
public static synchronized WeakReference<HandheldMapViewProvider> getInstance(){
if(mInstance == null){
mInstance = new WeakReference<HandheldMapViewProvider>(new HandheldMapViewProvider());
}
return mInstance;
}
public void onprint(String data){
Log.D("TAG",data)
}
}
L'utilisation de la classe ci-dessus est la suivante.
private WeakReference<HandheldMapViewProvider> hereMapViewProvider;
public void onprint(){
hereMapViewProvider = HandheldMapViewProvider.getInstance();
hereMapViewProvider.get().onprint("somevalue");
}
Tout en appelant la méthode OnPrint première application de temps se plantage parfois en raison de get() est nulle.
Toute idée où je me trompe. ça ne se passe pas tout le temps.
La solution est comme ci-dessous.
public static synchronized HandheldMapViewProvider getInstance(){
HandheldMapViewProvider mapProvider = mInstance == null ? null :mInstance.get();
if(mapProvider == null){
mInstance = new WeakReference<HandheldMapViewProvider>(mapProvider =new HandheldMapViewProvider());
}
return mapProvider;
}
Votre principale erreur est d'annuler le motif singelton en premier lieu. https://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons –
D'où vous appelez les derniers morceaux de code? –
@EnamulHaque de l'activité. Généralement, le même code fonctionne parfaitement. quelque temps je deviens nul. –