Android 切换界面黑屏

本文详细解析了Android应用程序中常见的切屏导致黑屏问题,介绍了如何在Manifest文件中为每个Activity添加特定配置,以避免因屏幕方向切换或键盘状态改变而引发的黑屏现象。文章还解释了配置项的具体含义,帮助开发者更好地理解并解决此类问题。

这种切屏导致的黑屏多半是因为横竖屏切换或者其他问题没有配置响应
在Manifest中每个Activity都添加如下配置:

android:configChanges="orientation|keyboardHidden|navigation|screenSize"

这个配置的意思:
大佬的记录

VALUEDESCRIPTION
mcc国际移动用户识别码所属国家代号是改变了,sim被侦测到了,去更新mcc MCC是移动用户所属国家代号
mnc国际移动用户识别码的移动网号码是改变了, sim被侦测到了,去更新mnc MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
locale用户所在区域发生变化,一般是用户切换了语言时,切换后的语言会显示出来
touchscreen触摸屏是改变了------通常是不会发生的
keyboard键盘发生了改变----例如用户用了外部的键盘
keyboardHidden键盘的可用性发生了改变
navigation导航发生了变化-----通常也不会发生
screenLayout屏幕的显示发生了变化------不同的显示被激活
fontScale字体比例发生了变化----选择了不同的全局字体
uiMode用户的模式发生了变化
orientation屏幕方向改变了—横竖屏切换
screenSize屏幕大小改变了
smallestScreenSize屏幕的物理大小改变了,如:连接到一个外部的屏幕上

黑屏原因:
程序在运行时,一些设备的配置可能会发生改变,如:横竖屏切换、键盘的可用性等这样的事情发生的时候,activity在没有配置android:configChanges时会重新启动,其过程如下图所示:
在这里插入图片描述
其onPause 、onSaveInstanceState、onStop、onDestroy方法均会被调用。onSaveInstanceState方法会在onStop方法之前调用,但是他和onPause方法调用没有特定先后顺序,可前可后。

在销毁activity之前会通过方法onSaveInstanceState保存你应用中的一些数据,然后call onDestroy方法,然后当重新创建activity时调用onCreate方法之后会调用onRestoreInstanceState方法来恢复之前保存的数据
所以黑屏就是在这里产生的,渲染的时候其实你的activity还没有初始化好所以就黑屏了。

### 解决Android应用中XML界面切换时出现黑屏的方法 在设计和开发Android应用程序的过程中,遇到界面切换时短暂显示黑色背景的情况较为常见。这种情况通常发生在新Activity启动或Fragment之间的转换期间,由于新的视图尚未完全加载而旧的视图已经消失所引起。 为了改善用户体验并解决此问题,可以采取以下几种策略: #### 使用主题样式设置窗口背景颜色 通过修改`styles.xml`文件中的AppTheme来指定一个非白色的默认背景色作为过渡效果的一部分,这样可以在下一个页面还未准备好前保持一致的颜色而不是纯黑色[^1]。 ```xml <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here --> <item name="android:windowBackground">@color/your_custom_color</item> </style> ``` #### 设置透明度动画 利用`overridePendingTransition()`方法来自定义两个活动间的转场动画,特别是对于那些需要平滑视觉衔接的应用场景非常有用。创建淡入淡出的效果可以帮助掩盖瞬间的空白状态[^4]。 ```java // 在startActivity之后立即调用该函数 Intent intent = new Intent(CurrentActivity.this, NextActivity.class); startActivity(intent); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); // 自定义动画资源ID ``` - `R.anim.fade_in`: 定义了一个Alpha属性由0到1的变化过程; - `R.anim.fade_out`: 则相反,是从可见变为不可见的过程; 这些动画可以通过XML描述符实现,放置于项目的res/anim目录下: ```xml <!-- res/anim/fade_in.xml --> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_shortAnimTime"/> <!-- res/anim/fade_out.xml --> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="@android:integer/config_shortAnimTime"/> ``` #### 预先加载重载的地图组件或其他耗时初始化的内容 针对特定控件如百度地图MapView造成的黑屏情况,建议提前准备数据并在后台线程完成必要的准备工作后再展现给用户,以此减少初次绘制所需时间。另外也可以考虑采用缓存机制保存最近使用的地图实例以便快速恢复显示[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值