Activity启动的时候需要一段时间去初始化,这个时候就会有一定的延迟,为了提高用户体验,Android引入了StartingWindow来对这个过程进行过度,在真正的Activity进行初始化的时候会显示StartingWindow,该StartingWindow的主题样式和真正的Activity的主题是一样的。在真正的Activity初始化完成之后就会消除掉StartingWindow,显示真正的Activity。由于这个StartingWindow只是一个很简单的Window,它只是具有真正Activity的主题样式,但是内容是没有被指定的,当真正的Activity的主题设置了windowBackgrond后,StartingWindow就会显示这个windowBackground,如果你的windowBackground是白色的,那么闪白屏,windowBackground是黑色的就会闪黑屏。
MTK是使用这样的方式来避免闪屏的。
原来打开短信默认的打开界面是ConversationList,但是MTK默认打开的界面是BootActivity。
其配置的主题是(不会出现闪屏)
<style name="Theme.NoDisplay">
<item name="android:windowBackground">@null</item>没有背景
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>透明
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>禁用窗口的预览动画
<item name="android:windowNoDisplay">true</item>
</style>
然后在BootActivity.java中
private void enterMms() {
MmsLog.d(TAG, "bootActivity enter MMS");
finish();
int flags = Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK;
if (!FolderModeUtils.startFolderViewList(
mOpBootActivityExt.enterMms(), this, null, flags)) {
Intent intent = new Intent(this, ConversationList.class);
intent.setFlags(flags); // /M: changed for alps00437708
startActivity(intent);
}
}
在这里finish自己,打开真正的短信列表界面ConversationList,就不会出现闪屏了。
注意类似BootActivity一定不能做复杂的逻辑操作,他就是一个临时展现的activity,UI也要简单化。
其实还可以有其他优化方案,例如加载的android:windowBackground设置为一张图片,这样就不会黑屏白屏闪屏了。然后可以在onCreate再设置回自己的主题。setTheme方法。