包体积优化:
话术:优化之前项目的包体积大小是 80M,优化之后是 50M.
极限瘦身
-
图片转为webp格式
-
去除多语言
-
去除不必要so库
-
开启混淆
离线资源处理:
离线资源建议从服务器下载,不打入apk包中(动态翻译库)
存储优化
sp优化:
由于同步commit比异步apply(先内存,再磁盘)更加耗时;因此将存储的数据进行批量apply,而不是立刻commit,减少性能消耗;
网络优化
说说你在项目中网络优化?
程序员:
有,这一点其实可以通过 OKHTTP 连接池和 Http 缓存来说一下(当然这里不会再展开分析 OKHTTP 源码了)
面试官:
那你具体说一下吧
程序员
移动端获取网络数据优化的几个点
1、连接复用(http2的特点):节省连接建立时间,如开启 keep-alive。于Android来说默认情况下HttpURLConnection和HttpClient都开启了keep-alive。只是2.2之前HttpURLConnection存在影响连接池的Bug。
2、请求合并(http2的合并):即将多个请求合并为一个进行请求,比较常见的就是网页中的CSS Image Sprites。如果某个页面内请求过多,也可以考虑做一定的请求合并。
3、减少请求数据的大小(http2的头部压缩和okhttp的gzip压缩):对于post请求,body可以做gzip压缩的,header也可以做数据压缩(不过只支持http 2.0)。 返回数据的body也可以做gzip压缩,body数据体积可以缩小到原来的30%左右(也可以考虑压缩返回的json数据的key数据的体积,尤其是针对返回数据格式变化不大的情况,支付宝聊天返回的数据用到了,模仿http2的头部Hpack压缩方式)。
此外,这里既然都提到okhttp的优化,可以再讲一下connect连接池、http缓存、责任链等;
4、根据用户的当前的网络质量来判断下载什么质量的图片(电商用的比较多)。
5、使用HttpDNS优化DNS:DNS存在解析慢和DNS劫持等问题。HTTPDNS 则不同,不走传统的 DNS 解析,从而绕过运营商的 LocalDNS 服务器,还缩短了解析路径,有效的防止了域名劫持,提高域名解析的效率。
(客户端下游的网络优化)
1.使用缓存。
2.合并网络请求,减少请求次数
3.实时的信息上报改为非实时上报
4.请求一个图片时进行压缩
5.使用webp图片
说了这些之后,再说一下你当前使用网络框架它们做了哪些优化比如 OKHTTP(Socket 连接池、Http缓存、责任链)、Retrofit(动态代理)。说了这些一般也行。