Android8.0 适配解决页面跳转过程出现短暂黑屏的问题
小菜在适配 Android8.0 过程中,遇到很多问题,有很多很常见的问题,今天来整理一下页面跳转时黑屏的问题。
问题猜测
猜测一:
显示 Activity 页面之前会优先开启一个 Starting Window(Preview Window),等待 Activity 加载完成之后显示 UI 界面,猜测在这个等待过程中可能会出现页面跳转时的短暂黑屏。
猜测二:
小菜的 BaseActivity 页面中在 onCreate() 和 finish(),方法中添加了进入页面和退出页面时的动画效果,猜测可能是动画效果不兼容引起页面跳转时的短暂黑屏。
@Override public void onCreate(Bundle savedInstanceState) { if (toggleOverridePendingTransitionStart()) { overridePendingTransition(R.anim.slide_right_in, 0); } super.onCreate(savedInstanceState); } @Override public void finish() { super.finish(); BaseAppManager.getInstance().removeActivity(this); if (toggleOverridePendingTransitionFinish()) { overridePendingTransition(0, R.anim.slide_right_out); } }
尝试解决
- 优先尝试修改主题样式,小菜前段时间整理 解决 Android 升级 SDK API 27 过程中遇到的问题 中有一个 Only fullscreen opaque activities can request orientation 问题,对于透明或半透明页面,Android8.0 需要将主题中的 android:windowActionBar 属性设为 false;小菜理解这个属性设为 true 是设置本页面为透明页面,小菜以为如果去掉相当于省略这个过渡效果,等待 1-2s 时间进入新页面;测试在小菜的 Android8.0 应用里面依旧会出现跳转短暂黑屏现象,故尝试方式一失败!
- 再次尝试修改主题样式,以为万能的添加主题背景图,设置主题 windowBackground,小菜以为添加一张透明背景图就可以解决;测试在小菜的应用背景图是有的,但还是会出现跳转短暂黑屏现象,故尝试方式二失败!
<style name="main_activity_style" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen"> <item name="android:windowIsTranslucent">false</item> <item name="android:windowDisablePreview">false</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowBackground">@drawable/background_splash</item> <item name="android:background">@null</item> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
- 小菜担心页面中会有其他因素影响,新建一个 AppCompatActivity 进行测试,以上两种方法均不会出现黑屏问题;因此小菜开始考虑 overridePendingTransition 动画效果的影响,把 BaseActivity 中的动画效果去掉;测试一切正常,没有出现短暂黑屏现象,因此确定是 overridePendingTransition 问题;
- 小菜测试发现是在 Android8.0 中 overridePendingTransition 若设为进入和进出为 0 时会出现黑屏,解决方案是:将 0 换为固定的进入和退出的 anim 即可,如下:
// 原来 overridePendingTransition(R.anim.slide_right_in, 0); // 替换为 overridePendingTransition(R.anim.slide_right_in, R.anim.slide_right_out); // 原来 overridePendingTransition(0, R.anim.slide_right_out); // 替换为 overridePendingTransition(R.anim.slide_right_in, R.anim.slide_right_out);
Tip:若只想有进入或退出时的动画,另一个动画去掉呢,可以自定义个 no_anim,替换上即可:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="0"> </set> // 原来 overridePendingTransition(0, R.anim.slide_right_out); // 替换为 overridePendingTransition(R.anim.no_anim, R.anim.slide_right_out);
插曲总结
- overridePendingTransition 第一个参数为页面进入时动画,第二个参数为页面退出时动画,不要记反了;
- 小菜的 BaseActivity 是在 onCreate() 和 finish() 中分别调用 overridePendingTransition 的,所以想调整个别页面其他动画效果时,需要在 onCreate() 和 finish() 方法中方分别定义。
至此,小菜的应用在 Android8.0 中页面跳转短暂黑屏问题已解决,测试正常;小菜发现在优化和适配的道路上还有很多意想不到的问题,随时调整随时记录,希望可以顺利解决!
以下是小菜公众号,欢迎闲来吐槽~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android开发之深度项目设计探索(三)
本文是《Android开发之深度项目设计探索》系列的第三篇,主要介绍的是 基于最新RxPermissions 类库的使用及源码分析,本系列历史文章:《Android开发之深度项目设计探索(一)》《Android开发之深度项目设计探索(二)》 Permission,这个单词翻译过来的意思有:允许、许可、权限。我们Android开发亲切的将其称为权限。 权限是一种安全机制。Android权限机制主要用于:限制应用程序内部某些具有限制特性的功能使用以及应用程序之间的组件访问。 在Android系统6.0版本(也就是 SdkVersion = 23)之前,权限的声明仅需要在清单配置文件中,通过标签uses-permission来声明应用,也就意味所需要的权限,如: <uses-permission android:name="android.permission.CAMERA"/> 这行配置代码的意思意味着该应用允许使用CAMERA(照相机)权限; 由于时代的发展以及各种因素,谷歌Android技术团队出于安全角度这一原则设计考虑,在Android系统6.0版本开始,之后的版本提出...
- 下一篇
react native 启动屏 设置 react-native-splash-screen
ios端集成 组件的安装 yarn add react-native-splash-screen react-native link react-native-splash-screen 在 AppDelegate.m中导入 这个类 image.png #import "RNSplashScreen.h" 有的地方是 #import "SplashScreen.h" 这里要注意看下 这个组件的类名是什么 image.png image.png 在AppDelegate.m中导入 这个类 后 开启启动屏 image.png 到这里基本配置算是完了 。 接下来配置启动图 image.png 点进去 image.png image.png 到这里 我们就要拖拽不同尺寸的适配图进去了 Mac的话 可以用这个软件 准备一张1024*1024.png大小的图 这个软件可以生成启动图 还有logo图都可以 image.png 也可以通过这个网址 上传 然后下载下来 ios android logo生成 这个网址只能生成logo图标 生成这些启动图 按照尺寸大小拖拽进去就可以了。 image.png ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能