public class RecycleViewList {
static final String TAG = "RecycleViewList";
private static final int INI_LIST_SIZE = 2;
private final SparseArray<SoftReference<View>> mViewCache = new SparseArray<SoftReference<View>>(INI_LIST_SIZE);
private Object syncLock = new Object();
public void addToCache(int idx, View v) {
synchronized (syncLock) {
int size = mViewCache.size();
Log.d(TAG, "addToCache: index="+idx+", size = "+size+", view="+v);
mViewCache.put(idx, new SoftReference<View>(v));
}
}
public View fetchCacheView(int idx) {
synchronized (syncLock) {
int size = mViewCache.size();
Log.d(TAG, "fetchCacheView: size = "+size);
if ((idx>=size) || (idx<0)) {
return null;
}
Log.d(TAG, "fetchCacheView: mViewCache.size() = "+mViewCache.size());
SoftReference<View> cachedView = mViewCache.get(idx);
Log.d(TAG, "fetchCacheView: cachedView= "+cachedView);
if (cachedView != null) {
View v = cachedView.get();
Log.d(TAG, "fetchCacheView: cachedView.get()= "+v);
if (v != null) {
Log.d(TAG, "fetchCacheView: leave with="+v);
return v;
}
}
}
return null;
}
public void clearCacheView() {
synchronized (syncLock) {
int size = mViewCache.size();
Log.d(TAG, "clearCacheView: size = "+size);
mViewCache.clear();
}
}
public int getSize() {
synchronized (syncLock) {
int size = mViewCache.size();
Log.d(TAG, "getSize: size = "+size);
return size;
}
}
}
------解决方案--------------------
静态函数,那就是应该用类级别的锁了,synchronized (FManager.class);或者在类里面用一个static的变量(private static Object syncObj = new Object();),然后synchronized(syncObj)即可。