启动APP时黑白屏的解决方案

黑白屏的原因

当打开一个Activity时,如果这个Activity所属的应用还没有在运行,系统会为这个Activity所属的应用创建一个进程,但进程的创建与初始化都需要时间,在这个动作完成之前系统要做什么呢?如果没有任何反应的话,如果程序初始化的时间很长,用户可能还以为没有点到相应的位置。但此时所启动的程序还没初始化完,既无法显示程序,又不能停在原处不做任何动作,怎么办?这就有了Starting Window的概念,也可以称之为Preview Window。

Starting Window就是一个用于在应用程序进程创建并初始化成功前显示的临时窗口,拥有的Window Type是TYPE_APPLICATION_STARTING。在程序初始化完成前显示这个窗口,以告知用户系统已经知道了他要打开这个应用并做出了响应,当程序初始化完成后显示用户UI并移除这个窗口。

显示白屏或者黑屏,是由你的启动Activity或者Application来决定的。如果你使用的是Light主题,那么就可能出现白屏;如果你使用的是Black主题,那么就可能出现黑屏。当你设置Light或者Black主题时,Starting Window显示的就是你启动Activity的android:windowBackground属性,所以才会出现白屏或者黑屏的情况。

方案一

修改AppTheme
在应用默认的AppTheme中,设置系统“取消预览(空白窗体)” 为true,或者设置空白窗体为透明;

<style name= “AppTheme”
parent=“Theme . AppCompat. Light . DarkActionBar”>
<!-- Customize your theme here.- - >
<item name= “colorPrimary”>@color/colorPrimary</item>
<item name=“colorPrimaryDark”>@color/colorPrimaryDark</item>
<item name=“colorAccent”>@color/ colorAccent</item>
<!-设置系统的取消预览(空白窗口)为true -->
<item name= "android: windowDisablePreview">true</item>
<!-设置背景为透明-->
<item name="android :wi ndowIsTranslucent">t rue</item>
</style>

这两个操作都属于将Theme的背景改为透明,这样用户从视觉上无法看出黑白屏的存在。

方案二

1.自定义继承自AppTheme的主题
2.将启动Activity的theme设置为自定义的主题
3.在启动Activity的onCreate方法中在super.onCreate和setContentView方法之前调用setTheme方法,将主题设置为自定义的AppTheme。

<!-1:自定义主题-->
<style name="AppTheme.LaunchTheme">
<item name=" android:windowBackground">@mipmap/ic_ launcher</item>
</style>
<!- 2:设置启动Activity主题-->
<activity android:name="MainActivity"
	android:theme=" @style/AppTheme.LaunchTheme">
	<intent-filter>
		<action android:name=" android.intent.action.MAIN" />
		<category 		android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
</activity>
<!- 3:在代码中将主题设置回来-->
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值