网络图片加载缓慢问题解决方案

本人最近开发的app是一款电视机顶盒android app,该app打开后会去向服务器求取各个位置的图片,图片内容是服务器后台事先上传并配置好的。客户端哪个页面,哪个位置放哪张图片,都是服务端配置的。所以app开启后的2,3秒内可能要请求十几、甚至几十张图片,并快速显示出来。通常情况下是没有问题的,但是有个别情况图片开始加载到全部加载完毕需要一二十秒,这个问题困扰了我好久。下面是我们的解决过程。

 

  • 首先怀疑网络问题

服务器开发人员反复实验多次,无论请求十张还是上百张,服务器都是快速返回图片数据,绝不至于要一二十秒;

 

  • 怀疑图片加载引擎出问题

先后用了五种图片加载引擎都会出现这种问题(用到的加载引擎有, ImageReq, FinalBitmap, facebook的fresco引擎,xutils, Picasso ,共五种,其中fresco 和xutils 在机顶盒上加载效果更好一些)。如果是加载引擎的问题,总不能所有引擎都有问题吧。

所以很可能代码里哪里出错了,或者图片请求过程哪里出错了。

 

  • 一个一个图片请求排查

经过给一个个图片加载请求过程加log并排查,发现只有当最开始请求的图片链接种有“无效链接”时才会有引擎加载慢的问题。

譬如,app开启时要同时请求十几张图片,而最开始的几张图片连接时无效的或者客户端永远请求不到的,这时候引擎图片请求就卡在这里,直到这几张图片请求出现网络报错或者“timeout”后才继续执行后面的“链接正常”的图片请求。这几张无效的图片请求导致后面十几张或几十张图片请求滞后。

 

当然若是最后几张图片出现“无效链接”则不会导致所有图片加载慢,此时最多是最后几张图片加载不出来。

只有最开始几张图片无效时才会出现这个问题。问题终于找到了。

 

  • 解决方法

这种无效链接而加载慢的问题,是客户端的原因吗?有一部分,图片请求时timeout时间太长了,所以最好自己能控制timeout时间,而不是全都交给引擎解决。1s内秒获取不到,就通知timeout。当然还有服务端的原因:因为客户端无法识别你这个链接是有效还是无效,譬如多加个字母,少加个数字客户端都无从知晓。所以最好也在服务端排查,为什么会传给客户端错误的链接?!

所以最终这个问题的解决是服务端人员完成的: 在返回给客户端发图片链接的时候严格检查,域名、路径、图片名字严格对应,保证所有图片链接是有效的,能成功请求到的。

同时客户端要完善图片请求过程,请求1秒得不到响应就抛出timeout异常,不至于一直占用资源等待而影响其他图片的获取。

 

关于网络请求图片缓慢的问题真的很令人头疼, 这仅仅是所有问题中的一个小插曲。记录该过程,以供参考。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值