我有一个FragmentStatePagerAdapter
,其中有一堆Fragment
在用户滑动时被加载和销毁。 Fragment
每个都包含一些文本和一些非常大的图像。我正在使用Picasso加载和缓存图像,每个Fragment都有自己的Picasso单个实例,在onDestroy()
关闭。
当为每个片段调用onDestroy()
时,我还想完全清除与Picasso实例关联的内存缓存。我已经尝试创建PicassoTools
类,如this answer所说,虽然这会清空缓存(根据调试器),但它似乎没有释放与缓存关联的内存,根据记忆监控器。这是onDestroy()
的代码:
@Override
public void onDestroy() {
PicassoTools.clearCache(picasso);
//release cache memory here somehow
picasso.shutdown();
super.onDestroy();
}
清除缓存后,如何完全释放与之关联的所有内存?
UPDATE :这是我的PicassoTools.clearCache()方法,名为onDestroy()
。我添加了Bitmap recycle()
ing,但这似乎没有什么区别。
public static void clearCache(Picasso p) {
ArrayList<String> keys = new ArrayList<>();
keys.addAll(((LoopableLruCache) p.cache).keySet()); //LoopableLruCache is an extension of Picasso's LruCache, just with a keySet() method for looping through it easier
for (String key : keys) {
Bitmap bmp = p.cache.get(key);
if (!bmp.isRecycled()) {
bmp.recycle();
}
bmp = null;
p.invalidate(key);
}
p.cache.clear();
}