App启动优化
App启动优化原理与技术方案
启动优化
黑白屏问题
- 启动页面主题设置为图片
- 启动页面,不要再onCreate生命周期写太多内容
- 启动页面做一个动画先展示(伪优化)
- 在Main主页面的onCreate生命周期,不写代码或者在这个生命周期能只允许耗时200ms左右。
- 把初始化的动作写在onWindowFocusChanged()里面,懒加载()和预加载()
- View UI布局优化,viewgroup层次,过度绘制
- 代码质量上的优化
补充一下
开机------->>桌面------->>App运行
参考[https://www.jianshu.com/u/167b54662111]
Android系统初始化 --(调用)-->>BootLoader 启动Linux系统(init.rc) /system/core/init/init.cpp中main方法LoadBootScripts(am, sm);方法专门加载脚本文件。/system/core/rootdir/init.rc
-->>trigger zygote-start zygote进程(注册JVM创建虚拟机 JNI)
开启zygote进程之后,开启SystemServer-->>打开SystemServiceManager,binder线程池的启动等。
在zygote进程、SystemServer和SystemServiceManager三个的共同作用下,去拉起AMS(activity manager service)、WMS(window manager service)、PMS(package manager service)、camera服务和传感器服务等等。
AMS-->>Launcher.java启动桌面 -->>startActivity(冷启动、热启动)-->>zygote进程 fork一个ActivityThread.java
ActivityThread.java main->
ActivityThread thread = new ActivityThread();
thread.attach(false, startSeq);
final IActivityManager mgr = ActivityManager.getService();
try {
mgr.attachApplication(mAppThread, startSeq);
}catch (RemoteException ex) {
throw ex.rethrowFromSystemServer();
}
//继续调用创建Application
handleBindApplication(AppBindData data)
//调用app的onCreate方法
mInstrumentation.callApplicationOnCreate(app);
//启动Activity,后面这里拿到activity对接开始进行调用activity的生命周期attach
private Activity performLaunchActivity();
Zygote是java层的进程即它也拥有一个独立的Dalvik 虚拟机实例,它是被linux层的第一个用户空间Init进程所启动的,它的主要作用就是用来孵化app进程和系统进程。
android系统的Zygote进程是所有的android进程的父进程,包括SystemServer和各种应用进程都是通过Zygote进程fork出来的。Zygote(孵化)进程相当于是android系统的根进程,后面所有的进程都是通过这个进程fork出来的,而Zygote进程则是通过linux系统的init进程启动的,也就是说,android系统中各种进程的启动方式
init进程 –> Zygote进程 –> SystemServer进程 –>各种应用进程
init进程:linux的根进程,android系统是基于linux系统的,因此可以算作是整个android操作系统的第一个进程;
Zygote进程:android系统的根进程,主要作用:可以作用Zygote进程fork出SystemServer进程和各种应用进程;
SystemService进程:主要是在这个进程中启动系统的各项服务,比如ActivityManagerService,PackageManagerService,WindowManagerService服务等等;
packages/apps/Provision/src/com/android/DefaultActivity.java
默认launcher frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
setDefaultLauncher

网友评论