目前市面上很多客户端启动流程逻辑过于冗杂和混乱,各个功能模块基本都有涉及启动逻辑,随着需求的不断迭代开发,启动模块一直在做加法,代码块不断地叠加,如果一直没有时间站在整个应用框架层面对启动流程去做系统的梳理和优化,很容易导致给人感觉APP启动时间慢,用户体验不好。为实现精细锻造、贴心体验目标,现需通过一系列的方法措施,加快我们应用启动(冷启动)时间,提升用户体验。
1. 启动流程优化思路
(1)Application的onCreate中不要做太多事情.
(2)首屏界面即LocalMainActivity尽量简化
(3)通过工具量化分析(TraceView、Hugo框架、ADB)
(4)给应用窗口StartingWindow添加一个PlaceHolder,即应用没有完全起来时,提前给用户展示一个静态的Splash界面主题图片,提升用户体验(注意正确的使用方法)
(5)部分后台耗时或加载操作放到展示广告欢迎界面时异步同时进行
(6)Multidex多dex异步线程执行,只把跟启动强相关的内容加载到main-dex里面,提升启动速度
2. 启动流程优化目标
梳理启动流程,精简、异步或延后执行耗时方法,提高代码效率
优化应用冷启动时延,提高用户体验,使用具体工具量化测试
启动模块历史遗留问题的分析与解决
3. 启动流程优化个人觉得可大概分为三个阶段
第一阶段:各应用APP启动模块代码精读,梳理整个Application和首屏逻辑流程,并通过工具(Hugo框架或是TraceView)检测项目中各方法耗时,筛选出耗时较大的方法,评估是否存在优化空间。
第二阶段:完成PlaceHolder静态主题、后台耗时或加载操作跟随欢迎界面异步同时进行或预加载逻辑代码编写以及部分Application和首屏Activity界面逻辑精简代码编写。
第三阶段:完成整个Application和首屏Activity代码流程梳理和耗时代码逻辑精简优化以及历史遗留问题的解决。
4. 性能优且体验棒的Splash页的设计
目前市场上的应用在启动时基本上都会先启动一个SplashActivity,作为一个欢迎界面,个人总结有三个优点:
--可以给用户更好的体验
--可以缩减App的启动时间
--可以在应用启动时做更多的事
目前大多数应用的Splash页设计存在不足之处,大多应用的Splash页设计都是利用一个Activity,取名叫SplashActivity,然后在这个SplashActivity中加入一个背景图,然后再newHandler().postDelayed()几秒中,再startActivity跳入主界面。这确实提高了应用的启动速度,毕竟我们比较快的看到了第一帧——SplashActivity,不过在SplashActivity之后,还需要调到MainActivity啊,虽然MainActivity中的一些数据可以在SplashActivity做预取,不过这中间需要有Intent的传递过程。
既然SplashActivity和MainActivity分开进行操作还是不完美,那么可以考虑把它们合为一起,即:一开始还是显示MainActivity,SplashActivity变为SplashFragment,然后放一个FrameLayout作为根布局去显示SplashFragment界面,这样在SplashFragment显示时候利用显示的2~4s间的空隙时间做网络请求去加载数据。
如下设计:
参考网站链接:
(1)https://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/
(2)https://www.bignerdranch.com/blog/splash-screens-the-right-way/
(3)http://blog.csdn.net/yanzhenjie1003/article/details/52201896