Android优化之网络优化和网络请求异常拦截优化

网络优化

1 图片分类web

  • 图片网络优化json

    好比我以前看到豆瓣接口,提供一种加载图片方式特别好。接口返回图片的数据有三种,一种是高清大图,一种是正常图片,一种是缩略小图。当用户处于wifi下给控件设置高清大图,当4g或者3g模式下加载正常图片,当弱网条件下加载缩略图【也称与加载图】。
    简单来讲根据用户的当前的网络质量来判断下载什么质量的图片(电商用的比较多)。豆瓣开源接口能够参考一下!服务器

2.获取网络数据优化网络

  • 移动端获取网络数据优化的几个点
    链接复用:节省链接创建时间,如开启 keep-alive。
    对于Android来讲默认状况下HttpURLConnection和HttpClient都开启了keep-alive。只是2.2以前HttpURLConnection存在影响链接池的Bug,具体可见:Android HttpURLConnection及HttpClient选择ide

    请求合并:即将多个请求合并为一个进行请求,比较常见的就是网页中的CSS Image
    Sprites。若是某个页面内请求过多,也能够考虑作必定的请求合并。svg

    减小请求数据的大小:对于post请求,body能够作gzip压缩的,header也能够作数据压缩(不过只支持http
    返回数据的body也能够作gzip压缩,body数据体积能够缩小到原来的30%左右。(也能够考虑压缩返回的json数据的key数据的体积,尤为是针对返回数据格式变化不大的状况,支付宝聊天返回的数据用到了)post

网络请求异常拦截优化

  • 在获取数据的流程中,访问接口和解析数据时都有可能会出错,咱们能够经过拦截器在这两层拦截错误。优化

    1.在访问接口时,咱们不用设置拦截器,由于一旦出现错误,Retrofit会自动抛出异常。好比,常见请求异常404,500,503等等。code

    2.在解析数据时,咱们设置一个拦截器,判断Result里面的code是否为成功,若是不成功,则要根据与服务器约定好的错误码来抛出对应的异常。好比,token失效,禁用同帐号登录多台设备,缺乏参数,参数传递异常等等。xml

    3.除此之外,为了咱们要尽可能避免在View层对错误进行判断,处理,咱们必须还要设置一个拦截器,拦截onError事件,而后使用ExceptionUtils,让其根据错误类型来分别处理。

    4.具体能够直接看lib中的ExceptionUtils类,那么如何调用呢?入侵性极低,不用改变以前的代码!

    @Override
    public void onError(Throwable e) {
        //直接调用便可
        ExceptionUtils.handleException(e);
    }

from:https://juejin.im/post/5d072dbc51882540b7104709#heading-26