android app 启动流程以及造成黑白屏的原因

111.png

一,手机开机流程:

当我们的用户将手机开机以后,手机内部会有一个引导芯片,这个引导芯片会去从一个只能读取的存储器中,将挂好的一个叫BootLoader的引导程序加载进我们的主存空间。(这个主存空间是一个与CPU直接交换数据的内部存储器)这也相当于说,我们的手机开机以后,不会直接去启动android系统,而是先要经过这个BootLoader小程序,这个小程序就是为了将我们整个系统拉起来运行。
    而我们的android是基于linux内核的,所以,当BootLoader在启动程序运行的时候,我们先是要进行linux的启动。
    那么linux启动的时候,它会先设置一些缓存,加载一些驱动。当这个linux内核完成设置以后,它就会去系统文件中去找一个叫做 init.rc 的文件,并且启动一个叫做 init 的进程。init 的这个进程,它的 id 为1。
    那么 init 进程在启动以后,它也会帮我们去启动一个叫做 zygote 的进程。
    然后 zygote 这个进程会帮我们去去启动 JVM 这个java虚拟机,然后会帮我们去注册 JNI 的方法,然后去启动 SystemServer的其他进程。
    然后我们比较常见的就是在 android 这个系统里面,我们概念比较熟悉的 Binder 线程池,SystemServiceManger,ActivityMangerService 等一些其他服务等。这些都是 SystemService 启动的。而我们启动的这些服务中,ActivityMangerService

又会帮我们去启动一个叫 Launcher的东西。
那么 launcher 是个什么东西呢 ,launcher 其实就是一个 app。launcher 就是我们打开手机看到的桌面上的那些东西。它会将我们系统中安装的所有应用的快捷键信息,全部都放到屏幕上面。当我们点击屏幕上某个 app 的按虐的时候才会进入到app的启动流程。

二,app的启动方式:

    app的启动分为冷、热、暖  三种启动方式

冷启动

程序从头开始,系统没有为该程序创建进程。一般场景:程序安装后的第一次启动;应用程序被系统完全终止后再打开。

热启动

此时程序任然驻留在内存中,只是被启动从后台带到前台,因此程序可以避免重复对象初始化,加载布局和渲染。需要注意的是:如果程序的某些内存被系统清楚,比如调用了 onTrimMemory 方法,则需要重新创建这些对象以相应热启动事件。

暖启动

他包含热启动和冷启动 一系列的 操作子集,比热启动的消耗稍微多一点。他与热启动最大区别在于,他必须通过调用 onCreate 方法开始重新创建活动,给可以从传递给 onCreate 方法中 保存的实例状态中 获得某些对象的恢复。

冷启动流程

1111.png

冷启动的时候,系统会去创建 app 的信息,在创建 app 信息的时候,进程中很多代码执行的时间会比较耗时,因此,当用户点击app 图标的时候会很容看出卡顿的现象,为了解决这个问题,谷歌是直接启动了一个空白窗体,让用户感觉到 app 一点击立刻就有反馈,这个也是 app 启动的时候黑白屏造成的原因。

app启动总结

1111.png

三,黑白屏

原因


1111.png

你可能感兴趣的:(android app 启动流程以及造成黑白屏的原因)