释放Picasso缓存中的所有内存

时间:2016-09-20 23:11:52

标签: android android-fragments caching picasso

我有一个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();
}

0 个答案:

没有答案