毕加索正在使用应用程序小部件中的缓存图像数据

Picasso is using data for cached images in an appwidget

我们有一个包含多个 ImageView 的 appwidget,这些 ImageView 需要每隔一段时间更新一次图像。图像存储在网络上,url 存储在我们轮换的 ArrayList 中。我们将 Picasso 与具有缓存的 OkHttp3 下载器一起使用。即使在所有图像至少显示一次之后,我们的应用程序仍在根据设置应用程序中的 Android 内置数据使用选项使用数据。当打开飞行模式时,小部件继续工作并显示所有图像,因此它们必须被缓存。为什么即使图像已缓存,毕加索仍在使用数据? (我们已经排除了 app/widget 的所有其他可能的数据消耗来源)

使用的库:

应用程序对象 onCreate() 中的 Picasso 初始化:

    Picasso.Builder picassoBuilder = new Picasso.Builder(this)
        .downloader(new OkHttp3Downloader(this))
        .indicatorsEnabled(true)
        .loggingEnabled(true);
    Picasso picasso = picassoBuilder.build();
    try {
        Picasso.setSingletonInstance(picasso);
    } catch(IllegalStateException e) {
        UsageTracker.handleException(e);
    }

正在从服务加载图像:

public static void updateImage(Context context, RemoteViews remoteViews, int resourceId, String url) {
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, WidgetProvider.class));
    Picasso.with(context).load(url).into(remoteViews, resourceId, appWidgetIds);
}

此外,有人知道指标和日志记录对 RemoteView 不起作用是否正常吗?

回答我自己的问题,以防有人遇到类似问题。

根据设计,即使 cache-age 仍然有效,也会向服务器发送 HTTP 请求以响应 304 状态,以便能够在服务器上测量图像显示的频率。我们在 Android 中看到的数据使用不是图像,而是很多 headers。