Android Picasso将所有图像预取到磁盘上

时间:2016-06-18 14:24:55

标签: android loading picasso prefetch

我想使用Picasso预取图像并在打开应用程序时将它们全部保存到磁盘上(动态上没有延迟加载)。为了确保缓存足够大,我在我的应用程序onCreate

中使用以下代码
ContextWrapper cw = new ContextWrapper(getApplicationContext());
// path to /data/data/yourapp/app_data/imageDir
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);

OkHttpClient client = new OkHttpClient.Builder()
        .cache(new Cache(directory, Integer.MAX_VALUE))
        .build();
OkHttp3Downloader okHttp3Downloader = new OkHttp3Downloader(client);
Picasso.Builder builder = new Picasso.Builder(this);
builder.downloader(okHttp3Downloader);
Picasso built = builder.build();
built.setIndicatorsEnabled(false);
built.setLoggingEnabled(false);
Picasso.setSingletonInstance(built);

所以在这里我将缓存大小设置为Integer.MAX_VALUE,这应该足够大;)

我使用与此行类似的代码来预取图片:Picasso.with(context).load(url).fetch();

现在当我杀死我的互联网和移动数据时,即使我的代码正在获取项目,也不会加载任何图像。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

也许这个问题正在失去状态。您是否尝试扩展Application类(如this)并将Picasso实例保留在此处?

在我需要获取大量图像的类似情况下,我将它们保存到内部存储器(不仅仅是在某些缓存中) - 以防止重新加载,并将文件保存到SQLite中,然后使用Picasso使用这样的URI。 (别忘了检查用户是否删除了任何内容)。

答案 1 :(得分:0)

最后,我创建了自己的图像管理器,用于下载和存储图像(仍然使用毕加索下载它们)。

答案 2 :(得分:0)

这是我的方法:

在应用程序的onCreate方法中执行

Picasso picasso = new Picasso.Builder(this)
        .downloader(new OkHttp3Downloader(this,Integer.MAX_VALUE))
        .build();
picasso.setIndicatorsEnabled(BuildConfig.DEBUG);
picasso.setLoggingEnabled(BuildConfig.DEBUG);
Picasso.setSingletonInstance(picasso);

然后在任何要加载图像的地方,为每个图像的url调用它:

Picasso.with(context).load(url).fetch();

来自文档:

  

fetch()

     

在没有ImageView或Target的情况下异步完成请求。当您想用图像预热缓存时,这很有用。

您甚至可以pass in callback检查可能的错误