Click Event -> IPC -> Proc
ess.start -> ActivityThread -> bindApplication -> LifeCycle -> ViewRootImpl
- 热启动:直接从后台切换到前台。
优化方向
可优化Application、Activity的创建以及回调过程
- 提前展示一个window(欢迎页),给用户友好的提示
- 避免启动做繁重密集的初始化操作
- 过度绘制,网络,io等优化
优化检测
- adb命令检测
// 其中的AppstartActivity全路径可以省略前面的packageName
adb shell am start -W [packageName]/[AppstartActivity全路径]
- ThisTime:最后一个Activity的启动耗时
- TotalTime:所有Activity的启动耗时
- WaitTime:表示AMS启动Activity的总耗时。
一般读取WaitTime,为Application和Activity的初始化过程耗时。(冷启动耗时)
优缺点:
- 线下使用方便,不能带到线上
- 非精确时间
- 自定义打点查看耗时
- 应用生命周期节点
- 启动的初始化方法节点
- 其他耗时业务,算法节点
优缺点:
- 精确,可上线
- 修改成本高
3.AOP打点 加入aspectjx库,打印出Application,Activity的耗时时间,进行针对优化
根路径build.gradle中添加
classpath ‘com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0’
app中build.gradle中添加
apply plugin: ‘android-aspectjx’
…
implementation ‘org.aspectj:aspectjrt:1.8.+’
使用如下:
@Aspect
public class LauncherAop {
@Around(“call(* com.jw.myapplication.MainActivity.**(…))”)
public void getTime(ProceedingJoinPoint joinPoint) throws Exception{
Signature signature = joinPoint.getSignature();
String name = signature.toShortString();
long time = System.currentTimeMillis();
try {
joinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
Log.d("kangkang = ","kangaop = " +name+ " cost " + (System.currentTimeMillis() - time));
}
}
4.TraceView
代码中开启
Debug.startMethodTracing();
method();
Debug.stopMethodTracing();
生成.trace文件,导入Android Studio,使用profile中的cpu查看文件生成的火炬图
优化方案
- 主题切换
设置自定义主题设置背景图,执行到onCreate方法后替换为Activiy的真实布局 2. 初始化分化
- MultiDex以及Tinker的初始化操作
- Application中的第三方组件的初始化
- 异步初始化组件,不阻塞主线程,设置异步线程为THREAD_PRIORITY_BACKGROUND
- 延迟初始化操作,再线程空闲时加载,
- EventBus、ota、bugly、migu、Linphone、Butterknife、地图、IOT
- 设置线程池初始化任务
- 仿照AsyncTask新建线程池,核心线程数为2-4个
最后
小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-iAXQ5gl2-1718986028276)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料⬅专栏获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料⬅专栏获取