功能:启动页展示logo和服务器配置的广告图
app启动方式
冷启动:应用尚未运行,系统创建进程并初始化应用
热启动:应用已经运行但是在后台挂起,从后台恢复应用
冷启动问题
优化点:从创建进程到第一个页面会有白屏或黑屏
解决:给第一个页面设置主题
<!-- 启动画面 -->
<style name="AppTheme.Splash" parent="Theme.AppCompat.NoActionBar">
<item name="android:background">@drawable/splash_background</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="colorPrimary">@color/white</item>
</style>
android:background和android:Windowbackground区别:
android:background:设置的背景在navigationbar之上
android:Windowbackground:设置的背景在navigationbar之下,所以背景图会遮挡部分。
推荐使用android:background属性
background背景图:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--底图占位颜色,防止背景图铺满不了全屏导致黑边问题-->
<item>
<color android:color="@color/white" />
</item>
<!--logo图片距离底部距离-->
<item android:bottom="35dp">
<bitmap
android:gravity="bottom|center_horizontal"
android:src="@mipmap/advert_app_logo" />
</item>
</layer-list>
给启动页设置布局,logo闪现问题
问题:给启动页设置布局后,底图logo图会从中间闪现到底部问题,原因未知
解决方案:
创建一个背景透明的主题,替换原先主题
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.SplashWithoutBg);
...
}
<style name="SplashWithoutBg" parent="@style/AppTheme.Splash">
<item name="android:background">@android:color/transparent</item>
</style>
新问题:主题替换为透明后,有些手机(小米)背景变为黑色背景问题
解决方案:在启动页底部用Layout设置和原先一样的底部布局