- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
如何对移动应用做性能优化?
任性的代价2014年“双十一”转型后的第一个机房:1个变2个+N多NB服务器万事俱备、只待下单结果....别仗着硬件NB任性!!!
我觉得问题不大,可以忍~上线前上线后
哪些方面?需求:哪些指标需要优化定位:性能问题在哪里解决:优化方法4
常见性能指标启动速度列表页滚动平滑点击事件响应图片加载快省电内存占用....
不同产品,不同流程,优化方法不同思路和理念比实际方法更重要–Paretoprinciple“formanyevents,roughly80%oftheeffectscomefrom20%ofthecauses.”
定位性能瓶颈71、启动速度2、滑动平滑性4、内存占用3、网络响应时间
启动速度优化延时初始化人的反应时间150ms~400ms看到启动完成到开始下一步操作有一个停顿在onCreate,onResume等回调方法中只进行ui初始化利用空闲时间动画间隙溅起页请求全局配置数据,缓存到本地。资源文件拷贝
自定义字体网络图片图片很多自动加载更多如何保证流畅滑动?找瓶颈!!!滑动平滑性优化-ListView9
重用ConvertView10滑动平滑性优化-ListView
使用ViewHolder11以上这两步是谷歌官方强烈推荐的做法,不只适用于ListView,也适用于GridView等如果没有特殊情况,所有ListView的Adapter都应该这样处理。注意:这是一个静态内部类面试时通过类似细节,分辨开发者水平和经验滑动平滑性优化-ListView
跟踪Scroll事件12该函数执行时间直接影响ListView滑动的流畅性。该函数的内部实现要遵循以下原则:只做getView()必须做的操作,其它无关操作一定要放到外部。例如:自定义字体加载耗时操作一定要放到另外的WorkThread执行。例如:图片的加载,网络请求等。优化getView()如果ListView的内容特别复杂,为进一步提升流畅性,可以考虑跟踪Scroll的滑动事件,在滑动时暂停其它Thread或降低优先级滑动平滑性优化-ListView
13建议使用第三方库,例如:picasso,volley等。但是,一定要了解库的实现原理。(AsyncHttpClient的例子)如何加载网络图片滑动平滑性优化-ListView
14库的实现原理ImageView加载图片请求是否在内存缓存?开启Thread是否在文件系统?更新图片内存缓存从网络加载图片更新文件缓存ImageView加载图片是否否是二级缓存Md5索引一级缓存LruCache线程池滑动平滑性优化-ListView工作线程如何更新UI?Runnabletask=getTask();newHandler(Looper.getMainLooper()).post(task);能用AsyncTask代替吗?
15LruCache实现原理:滑动平滑性优化-ListView
滑动平滑性优化-ListView图片服务器防止恶意攻击缩放裁剪留白圆角灰度滤镜压缩锐化1234567
回顾性能瓶颈171、启动速度2、滑动平滑性4、内存占用3、网络响应时间延迟初始化利用空闲时间重用ConvertViewViewHolder优化getView异步请求网络图片图片服务器
问:如何提高网络请求响应速度?答:1.多线程并发请求。2.弃用xml,采用json、protobuf。3.gzip压缩问:如何解决请求过多,线程占用资源问题?答:队列+线程池(newCacheThreadPool)(Volley,AsyncHttpClient)问:如何解决集合访问冲突问题?答:ConcurrentHashMap、ConcurrentLinkedQueue 关注?java.util.concurrent网络响应时间
AsyncHttpClientContextListContextListContextListContextListRequestHandleRequestHandleAsyncHttpRequestnewCachThreadPoolRequestResponseCollection.synchronized(newWeakHashMap())Collection.synchronized(newArrayList())newFixedThreadPool
回顾性能瓶颈201、启动速度2、滑动平滑性4、内存占用3、网络响应时间延迟初始化利用空闲时间重用ConvertViewViewHolder优化getView异步请求网络图片图片服务器Json+gzip并发请求善用第三方库
内存问题单例模式观察者模式SoftRefere
文档评论(0)