Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我如何避免毕加索在网络上重复请求调整大小的图像?_Android_Image_Android Lifecycle_Picasso - Fatal编程技术网

Android 我如何避免毕加索在网络上重复请求调整大小的图像?

Android 我如何避免毕加索在网络上重复请求调整大小的图像?,android,image,android-lifecycle,picasso,Android,Image,Android Lifecycle,Picasso,当我在不同的活动中使用并监视网络请求时,我看到的是第一个活动为图像a创建了一个网络请求。在加载图像a之前,用户可以点击某个位置并打开第二个活动,该活动也加载了图像a。现在我看到第二个网络请求已经打开,再次获取图像a,这意味着下载两次相同的图像 有没有办法让毕加索等到第一个请求完成并重用其结果,以避免占用带宽 更新:经过一点测试后,我发现问题与单独的活动无关。我从头开始创建了一个测试,其中两个不同的活动加载了一个映像,并为这两个映像执行了一个请求,这非常棒。然而,我的制作应用程序中的这种行为一直在

当我在不同的活动中使用并监视网络请求时,我看到的是第一个活动为图像a创建了一个网络请求。在加载图像a之前,用户可以点击某个位置并打开第二个活动,该活动也加载了图像a。现在我看到第二个网络请求已经打开,再次获取图像a,这意味着下载两次相同的图像

有没有办法让毕加索等到第一个请求完成并重用其结果,以避免占用带宽

更新:经过一点测试后,我发现问题与单独的活动无关。我从头开始创建了一个测试,其中两个不同的活动加载了一个映像,并为这两个映像执行了一个请求,这非常棒。然而,我的制作应用程序中的这种行为一直在发生,很可能是因为图像被调整大小并裁剪成不同的大小。在一个活动中,用户图像显示为一个裁剪的小圆圈,在另一个活动中,用户图像显示时不调整大小。下面是一个重现问题的示例:

    String IMAGE_URL = "http://www.elhaso.es/temp/big.jpg";
    Picasso.with(this)
            .load(IMAGE_URL)
            .into(mImage1);
    Picasso.with(MainActivity.this)
            .load(IMAGE_URL)
            .resize(233, 333).centerCrop()
            .into(mImage2);

由于
.resize(233333).centerCrop()
行的原因,此代码将打开并下载两次图像url,尽管它们是相同的资源。如果删除这一行,毕加索将执行单个请求,并在图像之间共享结果。由于没有调整大小的行为是好的,这可能是一个错误吗?对于记录,这是使用2.5.0实现的。

要使用毕加索暂停和恢复请求,请首先添加一个标记:

Picasso.with(context)
   .load("http://example.com/image.jpg")
   .tag(someTag)
   .into(someImageView)
然后打电话

picasso.resumeTag(someTag);

同样,要取消请求,请使用

picasso.cancelRequest();
因此,在
onPause()
onResume()
中,需要调用
pauseTag()
onResume()
活动的方法,类似地,在
ontop()
onDestroy()
中调用
cancelRequest()

有关参考,请参阅。一定要记住,你需要一个新的罐子来完成这一切

下面批评的“错误答案”是:

毕加索
活动
/
片段
生命周期。 做您可以从
onPause()
或取消正在进行的请求
onDestroy()
onStop()
。您甚至可以取消所有正在进行的请求 在一次拍摄(混乱,但它的工作)

所以你的问题的简短答案是否定的,因为毕加索不能 帮助您完成
活动
/
片段
生命周期


所以,是的,这是完全错误的。首先,毕加索对暂停、恢复和取消都有相同的控制。其次,在Picasso and Volley中取消实际上并不会取消底层网络请求(如果它已经启动)。你会看到两种行为形式都是一样的。我刚刚又看了一遍图书馆,你是对的,所以我为此道歉。我用
凌空抽射
完成了这些事情,但不是用
毕加索
完成的。从现在起,我将避免根据传闻给出答案:)我们为看到像你这样的答案而感到羞耻,而你的答案过去是真实的。所以我们添加了这些功能@GrzegorzAdamHankiewicz:这有用吗?感谢您的努力,我已经知道暂停/恢复,但进一步调查表明,在尝试将错误减少到一个较小的示例后,这不是问题所在。我已经更新了问题的更多细节。嗨@GrzegorzAdamHankiewicz,你找到问题的原因了吗?
picasso.cancelRequest();