【发布时间】:2017-07-17 11:19:59
【问题描述】:
这是我的弱引用单例类。
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;
}
【问题讨论】:
-
你的主要错误是首先取消了单例模式。 stackoverflow.com/questions/137975/…
-
从哪里调用最后一段代码?
-
@EnamulHaque 来自活动。大多数相同的代码运行良好。有时我会变得空虚。
-
您是否经常调用该活动..例如重复2-3次
-
@EnamulHaque 不。
标签: java android singleton weak-references