這裏是我帶有弱引用的單例類。帶有弱引用的Java單例
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)
}
}
上述類的用法如下。
private WeakReference<HandheldMapViewProvider> hereMapViewProvider;
public void onprint(){
hereMapViewProvider = HandheldMapViewProvider.getInstance();
hereMapViewProvider.get().onprint("somevalue");
}
雖然第一次調用onprint方法的應用程序有時因get()爲空而崩潰。
任何想法,我做錯了。它並沒有一直髮生。
解決方法如下。
public static synchronized HandheldMapViewProvider getInstance(){
HandheldMapViewProvider mapProvider = mInstance == null ? null :mInstance.get();
if(mapProvider == null){
mInstance = new WeakReference<HandheldMapViewProvider>(mapProvider =new HandheldMapViewProvider());
}
return mapProvider;
}
您的主要錯誤是擺脫了singelton模式擺在首位。 https://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons –
從哪裏調用最後一段代碼? – 2017-07-17 13:19:35
@EnamulHaque來自活動。大多數相同的代碼是完美的。有一段時間我變得空了。 –