当前位置: 首页 > 科技观察

Android架构师之路App启动性能速度优化

时间:2023-03-14 21:43:09 科技观察

本文转载自微信公众号《Android开发编程》,作者Android开发编程。转载本文请联系Android开发编程公众号。一、启动性能优化的原因1、性能问题的原因随着项目的不断快速迭代,往往会导致App启动缓慢,因为很多初始化可能会放在App主进程的启动阶段或主界面的启动阶段。其他业务的逻辑,而这些业务一开始可能不需要用到;2、为什么要优化启动速度?App启动慢会影响App的卸载率和使用率;启动速度快,给人轻快感,减少用户等待时间;如果一个应用程序从点击桌面图标到看到主界面需要10秒,你能接受吗?如果实在受不了,可以直接卸载,或者直接按Home键再打开。出去,然后kill进程;这样一来,App卸载率上升了,使用率下降了。因此,对于拥有大量用户的应用程序,这些性能细节非常重要;二、分析如何做启动优化1、简单的启动流程分析app从点击桌面图标到看到app主界面的整个过程中经历了哪些步骤,哪些地方是我们可以优化的;下图是对App启动过程的概括描述2.从启动过程中寻找优化点。我们在App启动过程中优化的地方包括主进程启动过程和主界面启动过程。进程启动是Application的创建过程,主界面的启动是MainActivity的创建过程;只需要分别优化这两部分:先调用Application中的attachBaseContext,再调用onCreate方法,尽量不要在这两个方法中使用有耗时的操作;MainActivity专注于onCreate、onResume、onWindowFocusChange;3、HugoHugo项目,是一个耗时操作的耗时统计工具,是一个调试耗时函数调用的工具。通过在方法或类上添加@DebugLog注解,在运行时,控制台会打印出函数耗时,通常用于排查函数耗时问题,或者进行卡顿检测;①使用方法项目根目录build.gradle添加hugo插件依赖类路径'com.jakewharton.hugo:hugo-plugin:1.2.1'②声明hugo插件applyplugin:'com.jakewharton.hugo'主项目或库的build.gradle。Hugo功能可以通过配置开启或关闭。hugo{enabledfalse}③在类或方法上声明@DebugLog注解@DebugLogpublicStringgetName(Stringfirst,Stringlast){SystemClock.sleep(15);returnfirst+""+last;}④运行程序会打印函数耗时日志在console:getName[16ms]="testtest"其实hugo项目很简单,后面会讲解怎么写;三、优化步骤1、在Application中加入异步线程就是把不需要提前做的操作放到异步线程中。也就是我们经常做的异步加载;下面简单写个代码示例publicclassStartUpApplicationextendsApplication{@OverridepublicvoidonCreate(){//程序创建时调用,第二个方法要尽快执行,否则会拖慢整个app的启动速度super.onCreate();onSyncLoadForCreate();}@OverrideprotectedvoidattachBaseContext(Contextbase){super.attachBaseContext(base);onSyncLoad();onAsyncLoad();}privatevoidonSyncLoadForCreate(){Logutils.log("onSyncLoadForCreate");Thread.sleep(200);阻塞200毫秒}privatevoidonSyncLoad(){Logutils.log("onSyncLoad");Thread.sleep(200);模拟阻塞100毫秒}publicvoidonAsyncLoad(){newThread(newRunnable(){@Overridepublicvoidrun(){//异步加载逻辑}},"ApplicationAsyncLoad").start();}}2.添加异步线程和延迟加载函数主页面同Application的优化思路一样。还封装了onSyncLoad和onAsyncLoad方法,优化现有代码进行分类,但是调用这两个方法的时机稍晚。调用这一步还需要在主界面首屏绘制的时候新建一个Thead,这是一个额外的开销,但是不影响我们的整体性能;3、动态加载布局:主布局文件优化使用动态加载处理主界面中所有不需要第一次使用的布局,使用ViewStub或者在使用过程中直接动态添加View;4.主布局文件的深度优化如果经过以上优化后,您仍然发现进入主界面有点慢,则需要重点关注主布局文件。主布局文件的复杂程度直接影响到Activity的加载速度。这时候就需要对主布局文件进行深度优化;当Activity加载布局时,会分析整个布局文件,度量(measure),布局(layout)和绘图(draw),所以设计一个简单合理的布局就显得尤为重要。几个重要的优化如下:减少布局层次减少第一次加载的View数量减少透支5.页面功能的模块化和懒加载一个页面上有很多功能模块,最好将每个功能模块分开.使用接口进行数据通信;按需加载需要的功能,不要打开一个页面加载所有功能;加载完需要的功能后,如果是一次性加载,则不需要一直保存在内存中,应尽快销毁,养成良好的习惯;总结:优化是一条不断的路。通过优化,我们可以了解影响启动性能的因素,从而使我们平时在编码过程中更加关注我们的代码性能;其实优化的方式有很多,比如资源文件的优化,C++层的性能密集型写法,合理的设计模式等等,我们要做的就是规范自己的代码,让自己变得更强更好。