美文网首页
Android App启动及黑白屏

Android App启动及黑白屏

作者: xyzkaye | 来源:发表于2022-06-20 00:01 被阅读0次

    App启动流程,黑白屏原因

    APP启动流程详解

    开机启动流程

    开机启动流程

    当用户将安卓手机开机以后,手机内部会有一个引导芯片,这个引导芯片会去一个只能读取的存储器中将一个叫做BootLoader的引导程序,加载进主存空间,这个主存它是我们这个cpu直接交换数据的一个内部存储器。手机开启后,它并不会说直接去启动Android系统,而是需要通过这个小程序,它就是为了将我们的整个系统拉起来而运行,Android是基于这个Linux内核的,当它在启动这个程序的运行的时候,先是要进行这个Linux的这个启动,Linux启动的时候,它会先设置缓存加载驱动,当这个内核完成设置之后,它就会从这个系统文件中去寻找一个叫做init.rc文件,并且启动一个叫做init的进程,这个进程的id为1,那么init进程在启动之后,它也会去启动Zygote这样一个进程,然后Zygote会帮我们去启动JVM虚拟机,注册JNI的方法,启动SystemServer等一些其他的进程;在Android系统里概念比较熟悉的,如Binder线程池,SystemServiceManager,ActivityManagerService等一些其他的服务都是有SystemServer进行启动的;启动这些服务里面,ActivityManagerServer又会帮我们启动一个Launcher,Luanch也是一个App,打开手机看到的就是Luanch应用,它会将我们这个系统中安装的时候这些应用的一些快捷键的信息,类似于这个快捷的信息,全部都放到这个屏幕上面来,那么当我们点击这个上面的某个App的按钮,才会进入这个App的启动流程。

    冷/热/暖启动

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

    冷启动流程:1、加载并启动App;2、启动后立即为改App显示一个空白的启动窗口;3、创建App进程;4、创建主Activity;5、加载布局,绘制

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

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

    App启动总结

    App从被系统调用,再到第一个页面渲染到手机屏幕。我们通常只需要关注Application中的onCreate方法,第一个Activity中onCreate, onStart, onResume方法。

    注意:如果在App启动第一个Activity时,该Activity不但有自己的逻辑,还在onCreate,onStart或者onResume方法中直接又跳转到了其他Activity页面,那么跳转后的Activity的这三个方法也需要进行优化。


    黑白屏原因

    黑白屏原因:在App的启动流程中,我们已知:当系统加载并启动App时,需要耗费相应的时间,即使时间不到1秒,用户也会感觉到当点击App图标时会有“延迟”现象,为了解决这问题,Google的做法是在App创建的过程中,先展示一个空白页面,让用户体会到点击图标之后立马就有响应而这个空白页面的颜色则是根据我们在Manifest文件中配置的主题背景颜色来决定的;现在一般默认是白色(android:theme=@style/AppTheme”);

    解决黑白屏以及App启动优化

    解决方案一:修改AppTheme

    在应用默认的AppTheme中,设置系统“取消预览(空白窗体)”为true,或者设置空白窗体为透明,具体代码如下所示;

    ```

    «style name= "AppTheme"

    parent= "Theme.AppCompat.Light.DarkActionBar"

    <! -- Customize your theme here.-->

    <item name= "colorPrimary">@color/colorPrimary</item>

    <item name= "colorPrimaryDark"</item> <!--@color/colorPrimaryDark-->

    <item name= "colorAccent">@color/colorAccent</item>

    <!--设置系统取消预览(空白窗口)为true ->

    <item name="android:windowDisablePreview">true</item>

    <!--设置背景透明 ->

    <item name="android:windowIsTranslucent">true</item>

    </style>

    ```

    该两种方式都属于同一种方案:将Theme的背景改为透明,这样用户从视觉上就无法看出黑白屏的存在。

    解决方案二:自定义AppTheme

    自定义集成自AppTheme的主题;将启动的Activity的Theme设置为自定义的主题;在启动Activity的onCreate方法中,在super.onCreate和setContentView方法之前调用setTheme方法,将主题设置为最初的AppTheme

    黑白屏解决总结:

    自动以Theme,单独设置给启动页Activity;

    使用layer-list,代替theme中的背景图片

    相关文章

      网友评论

          本文标题:Android App启动及黑白屏

          本文链接:https://www.haomeiwen.com/subject/leyjvrtx.html