业绩产出
背景:
内存问题是每个app都存在普遍问题,问题相对隐蔽,优化点繁多。
目的:
做内存优化的主要目的是减少OOM率、减少应用卡顿、增加应用存活时间、提高应用的稳定性。
做启动流程优化主要目的是减少冷启动、热启动的用户等待时间,提高用户体验。
产出:
1.分析XXAPP运行时内存的使用情况,优化XXAPP基础架构,优化项目中容易导致内存溢出、泄漏及内存抖动问题点。
2.优化XXAPP的启动流程,缩短冷启动时长。application从创建耗时1624毫秒降低到26毫秒。
3.XXAPP及某某 类7款APP集成集团APM日志监控系统。
自评
1.核心挑战:
XXAPP项目首页内容较多,分析定位内存问题相对麻烦,并且需要内存优化的点繁多,分布项目中的各个文件中。
XXAPP的启动流程涉及到自身应用参数配置初始化、大量的三方sdk初始化及开源项目初始化配置等工作。
2.应对措施及亮点:
在应用每个迭代中不断梳理考研启动流程、三方库初始化流程。能够通过profiler工具分析应用内存及应用启动耗时问题。通过火焰图分析定位堆栈信息,从而定位到应用启动初始化时的耗时方法。通过将耗时操作进行异步操作,避免阻塞主进程。
在平常的工作当中能够根据Java内存垃圾回收机制,对项目中的对象进行分类创建,包括强软弱虚四种引用类型,保证Java虚拟机进行高效内存回收,有效避免内存泄漏、内存抖动问题发生。
业绩产出
背景:
随着XXAPP、托福的日常版本功能迭代,应用大小会不断增加,虽然安装包大小对应用使用没有影响,但是应用的安装包越大,用户下载的意愿越低,安装等待的时间也会越长。
目的:
降低应用安装包大小,提高应用的下载转化率,争取在竞品中,做到体验最佳,功能最多,性能最好的应用。
产出:
1.XXAPP安装包大小由193M缩减到105M。
2.托福考安装包大小由100.9M缩减到83.8M。
自评
1.核心挑战:
XXAPP项目庞大,整个包含3个大的业务模块和几十个功能模块,每个模块都单独构建了一个库工程提供给主工程依赖。进行应用瘦身分析优化有一定的挑战。
2.应对措施及亮点:
在日常工作迭代中根据应用程序Apk的结构,进行有针对性的分析优化。分析移除assers、res中的冗余文件。针对res文件中的图片资源进行优化压缩,从而减少在Apk文件占比。
移除项目中废弃的三方sdk文件及so文件、统一项目中所依赖的三方库版本。因为项目中的所有class文件,都会被Java编译打包进入Apk文件,所以移除废弃注释的代码。
业绩产出
背景:院校tab页信息展示不全,信息曝光不精准。
目的:院校tab页改版,提升院校tab页PV占比及UV占比。
产出:
负责XXAPP院校专业tab改版的主框架搭建及院校专业、院校tab的功能开发。
自评
1.核心挑战:
首页tab、院校专业tab会形成多层viewpage嵌套,Framgent实例会常驻内存,导致内存占比增加,并会伴随滑动嵌套冲突问题。
2.应对措施及亮点:
采用FragmentStatePagerAdapter + viewpage2方案,并配合Fragment懒加载,当展示相应的Fragment页面时在动态加载页面数据。当Framgent变得不可见,不仅视图层次销毁,实例也被销毁,这种方案适合大量动态页面。有效降低院校专业页面在内存当中的使用占比。
业绩产出
背景:XXAPP小组件资讯数据长时间没维护,用户反馈小组件无法及时刷新数据问题较多。
产出:XXAPP小组件升级改版,拥有自主启动应用进程,并实时刷新资讯数据,提升用户对考研进度的关注度,提高用户从小组件启动XXAPP应用百分比。
自评
1.核心挑战:
小组件实时更新资讯数据,必须保证应用进程存活,目前手机厂商对android系统高度定制,不允许应用长期存活,当应用进入后台后,系统会杀掉应用进程。
2.应对措施:
通过对小组件技术调研,提供两种方案:一种方案是进程保活,一种方案是启动应用进程。
3.亮点
1.对小组件开发流程技术调研,熟悉小组件开发流程。
2.深入了解应用进程启动流程,应用启动依赖Android的四大组件启动。当满足小组件刷新规则时,便启动获取小组件资讯数据的service,最终通过Android的Binder跨进程通讯机制发送消息给system_server进程,并由ActivityManagerService通过socket通讯告知Zygote进程fork子进程。app进程启动后,实例化ActivityThread并执行main函数,到这里应用进程启动完毕,这时候初始化一些配置,获取小组件网络数据。