【发布时间】:2018-05-25 04:08:33
【问题描述】:
我正在使用绑定适配器在回收站视图中加载图像。图像看起来很好。在快速滚动时,我注意到有时我会收到来自 Picasso 的“连接泄露”消息。
问题来自死图像链接,将我所有的图像 URL 硬编码为指向无处会为每个图像产生错误在将第一对图像滚动出屏幕后。
W/OkHttpClient: A connection to https://s3-eu-west-1.amazonaws.com/ was leaked. Did you forget to close a response body?
代码基本相同to this sample。
BindingUtils.kt
object BindingUtils {
@BindingAdapter("imageUrl")
@JvmStatic
fun setImageUrl(imageView: ImageView, url: String) {
Picasso.with(imageView.context).load(url).into(imageView)
}
xml
<ImageView
android:id="@+id/imageview_merchant_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/primary"
android:scaleType="centerCrop"
app:imageUrl="@{viewModel.background}"/>
分级
implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
implementation "com.squareup.retrofit2:adapter-rxjava2:$rootProject.retrofitVersion"
implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"
implementation "com.squareup.okhttp3:logging-interceptor:$rootProject.okhttpLoggingVersion"
implementation "com.squareup.picasso:picasso:$rootProject.picassoVersion"
retrofitVersion = '2.3.0'
okhttpLoggingVersion = '3.6.0'
picassoVersion = '2.5.2'
我可以看到一些关于需要为标准 Okhttp 请求关闭连接的人的参考资料,但是看到 Picasso 加载调用是单行的,这怎么可能泄漏?
【问题讨论】:
-
也许你应该在调用新请求之前取消之前的请求:Picasso.with(context).cancelRequest(imageView);
标签: android kotlin picasso android-image android-databinding