用户从手机桌面点击APP的那一刻起到启动页面的Activity调用onCreate()方法之间的这个时间段称之为冷启动时间原因:在一个Activity打开时,如果该Activity所属的Application还没有启动,那么系统会为这个Activity创建一个进程(每创建一个进程都会调用一次Application,所以Application的onCreate()方法可能会被调用多次),在进程的创建和初始化中,势必会消耗一些时间,在这个时间里,WindowManager会先加载APP里的主题样式里的窗口背景(windowBackground)作为预览元素,然后才去真正的加载布局,如果这个时间过长,而默认的背景又是黑色
解决方案:为启动页设置特定的主题
<activity android:name=".SplashActivity" android:configChanges="orientation|screenSize|uiMode" android:label="@string/app_name" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity>
1. 为启动页的Activity设置特定主体,新增windowDisablePreview属性设为true即可
<style name="SplashTheme" parent="AppTheme.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowDisablePreview">true</item> </style>
或者
2.手动设置背景图片
<style name="SplashTheme" parent="AppTheme.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/img_splash</item> </style>
其中 方案1用户点击APP的时候并不会立即进入APP,而是在桌面上停顿一会,其实此时APP已经启动
方案2中如果将windowBackgraound的背景设置为完全透明,效果与方案1一致(微信就是采用的这种方案),
如果要设置启动页背景图注意内存问题即可,大部分应用也是采用这种方案