毕加索正在使用应用程序小部件中的缓存图像数据
Picasso is using data for cached images in an appwidget
我们有一个包含多个 ImageView 的 appwidget,这些 ImageView 需要每隔一段时间更新一次图像。图像存储在网络上,url 存储在我们轮换的 ArrayList 中。我们将 Picasso 与具有缓存的 OkHttp3 下载器一起使用。即使在所有图像至少显示一次之后,我们的应用程序仍在根据设置应用程序中的 Android 内置数据使用选项使用数据。当打开飞行模式时,小部件继续工作并显示所有图像,因此它们必须被缓存。为什么即使图像已缓存,毕加索仍在使用数据? (我们已经排除了 app/widget 的所有其他可能的数据消耗来源)
使用的库:
- com.squareup.okhttp3:okhttp:3.2.0
- com.squareup.picasso:picasso:2.5.2
- com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0
应用程序对象 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。
我们有一个包含多个 ImageView 的 appwidget,这些 ImageView 需要每隔一段时间更新一次图像。图像存储在网络上,url 存储在我们轮换的 ArrayList 中。我们将 Picasso 与具有缓存的 OkHttp3 下载器一起使用。即使在所有图像至少显示一次之后,我们的应用程序仍在根据设置应用程序中的 Android 内置数据使用选项使用数据。当打开飞行模式时,小部件继续工作并显示所有图像,因此它们必须被缓存。为什么即使图像已缓存,毕加索仍在使用数据? (我们已经排除了 app/widget 的所有其他可能的数据消耗来源)
使用的库:
- com.squareup.okhttp3:okhttp:3.2.0
- com.squareup.picasso:picasso:2.5.2
- com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0
应用程序对象 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。