启动优化(解决白屏问题)
一.启动优化分为什么?
冷启动(Cold Start): 在Android系统中,APP启动时,系统为每个运行的应用至少分配一个进程(多线程应用申请多个进程)。从进程角度讲,应该冷启动的时候,是没有该应用的进程配置信息的(包括 Application ,四大组件等)
或者可以说是属于你第一次打开APP,系统在给你开一个进程!
热启动(Hot Start): 就是你已经打开过APP但是实际上面你使用home键等。就是还存在后台的应用。再次打开的时候算是属于热启动了
二.如何做启动优化?
优化方案一:加一张背景图解决白屏问题
1. 首先,新建一个主题 (style)
1.
<item name="android:windowIsTranslucent">falseitem>
<item name="android:windowBackground">@mipmap/centeritem>
<item name="android:windowFullscreen">trueitem>
2.然后在AndroidManifast.xml文件中将主题设置给第一个启动的Activity
<activity
android:name=".MainActivity"
android:theme="@style/splashTheme">
3.然后在修改MainActivity的onCreate中,在setContentView(R.layout.avtivity_main)加载布局之前把主题修改回来
setTheme(R.style.AppTheme);
优化方案二:等界面初始化后再显示解决白屏问题
1.首先,在style里新建一个主题
<item name="windowNoTitle">trueitem>
<item name="android:windowBackground">@android:color/transparentitem>
<item name="android:windowIsTranslucent">trueitem>
<item name="android:screenOrientation">portraititem>
2.然后在AndroidManifast.xml文件中将主题设置给第一个启动的Activity
android:name=".MainActivity"
android:theme="@style/AppTheme2">
3.然后在修改MainActivity的onCreate中,在setContentView(R.layout.avtivity_main)加载布局之前把主题修改回来
setTheme(R.style.AppTheme);
4.常见的Theme主题
android:theme="@android:style/Theme.Dialog" //Activity显示为对话框模式
android:theme="@android:style/Theme.NoTitleBar" //不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不显示应用程序标题栏,并全屏
android:theme="Theme.Light " //背景为白色
android:theme="Theme.Light.NoTitleBar" //白色背景并无标题栏
android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,无标题栏,全屏
android:theme="Theme.Black" //背景黑色
android:theme="Theme.Black.NoTitleBar" //黑色背景并无标题栏
android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,无标题栏,全屏
android:theme="Theme.Wallpaper" //用系统桌面为应用程序背景
android:theme="Theme.Wallpaper.NoTitleBar" //用系统桌面为应用程序背景,且无标题栏
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系统桌面为应用程序背景,无标题栏,全屏
android:theme="Theme.Translucent" //透明背景
android:theme="Theme.Translucent.NoTitleBar" //透明背景并无标题
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景并无标题,全屏
android:theme="Theme.Panel " //面板风格显示
android:theme="Theme.Light.Panel" //平板风格显示
三.启动优化面试题:
1.启动优化包括什么?
.1)冷启动
当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。
2.)热启动
当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application,因为一个应用从新进程的创建到进程的销毁,Application只会初始化一次。