App白屏和启动优化的一些思路

App启动优化

App启动优化原理与技术方案
启动优化

黑白屏问题

  1. 启动页面主题设置为图片
  2. 启动页面,不要再onCreate生命周期写太多内容
  3. 启动页面做一个动画先展示(伪优化)
  4. 在Main主页面的onCreate生命周期,不写代码或者在这个生命周期能只允许耗时200ms左右。
  5. 把初始化的动作写在onWindowFocusChanged()里面,懒加载()和预加载()
  6. View UI布局优化,viewgroup层次,过度绘制
  7. 代码质量上的优化

补充一下

开机------->>桌面------->>App运行

http://androidxref.com/

参考[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

大概的图,画的有点乱,不要介意
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容