Android 跨进程启动Activity黑屏(白屏)的三种解决方案
来源:互联网 发布:万国数据员工工资高吗 编辑:程序博客网 时间:2024/05/29 15:11
当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?)。当然从桌面Lunacher启动一个App时也会出现相同情况,那是因为App冷启动也属于跨进程启动Activity。为什么没会出现这种情况呢?真正元凶就是Android创建进程需要准备很多资源,它是一个耗时的操作。
黑屏(白屏)原因
当A进程启动B进程中的一个Activity时,Android系统会先有zygote进程创建B进程,然后才能启动这个Activity。但创建进程是耗时的,在创建完成之前,新的Activity界面还没机会展示,如此用户在跳转新的Activity时会短暂没反应,这极大的降低用户体验。
Android团队避免出现这种尴局面,于是系统根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏。而这个黑(白)屏被称作Preview Window,即预览窗口。
解决方案
1.禁用Preview Window
既然Android在创建进程启动新Activity时默认设置了Preview Window,那么我们也可以在主题中禁用该属性。
style.xml
<style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar">
<item name="android:windowDisablePreview">true</item>
</style>
分析:这样做可以解决部分场景的问题,比如在A进程启动B进程中的Activity;但是在另外一个场景就有问题了,在桌面Launcher点击应用出现短暂的假死现象。
2.自定义Preview Window
既然Android可以根据主题设置Preview Windo黑屏(白屏),那么我们也可以自定义一个Preview Window样式来代替黑(白)屏效果。
style.xml
<style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar">
<item name="android:windowBackground">@drawable/splash_icon</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
</style>
分析:该解决方案很适合启动一个App场景,android:windowBackground属性设置Preview Window的背景,市面上大部分App都是使用该属性设置启动页背景。出于节省内存的考虑该背景图片适合使用效果简单的.9图片。
但是该解决方案不适合在跨进程启动Activity场景了。
3.设置Preview Window透明属性
我们可以设置Preview Window 为透明,也可以解决问题
style.xml
<style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
</style>
分析:该解决方案适合跨进程启动Activity场景使用。当然这个解决方案也会引入其他问题,就是:android:windowIsTranslucent 引起activity切换动画无效解决方案。为了追求极致,不能解决一个问题引入一个新问题,该问题的解决方案也有两种:
- 代码动态设置Activity专场动画
overridePendingTransition(R.anim.anim_right_in,R.anim.anim_left_out);
- 给Window 设置动画style
<style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@styleAnimation.Activity.Translucent.Style/</item>
</style>
<style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">
<item name="android:windowEnterAnimation">@anim/base_slide_right_in</item>
<item name="android:windowExitAnimation">@anim/base_slide_right_out</item>
</style>
自此,跨进程启动Activity黑(白)屏的三种方案已给出,看官可以根据不同场景使用以上不同解决方案
扫码关注微信公众号“Android知识传播”,不定时传播常用Android基础知识。
- Android 跨进程启动Activity黑屏(白屏)的三种解决方案
- 跨进程启动Activity黑屏(白屏)的三种解决方案
- activity启动黑屏的解决方案
- 跨进程启动activity
- 【Android】app 启动 白屏 黑屏解决方案
- Android启动Activity中间黑屏
- 启动Activity前的黑屏
- Android Activity启动时黑屏或者白屏的原因
- android 跨进程调用Activity
- Android 启动APP时黑屏白屏的三个解决方案
- Android 启动APP时黑屏白屏的三个解决方案
- Android 启动APP时黑屏白屏的三个解决方案
- Android 启动APP时黑屏白屏的三个解决方案
- android activity跳转时黑屏解决方案
- 【置顶】Android启动页面有白屏(或者黑屏)过渡解决方案
- 通过action 跨进程启动activity
- Android 启动页黑屏原因及解决方案
- android跨进程启动service
- VMware下扩展Ubuntu根分区大小的方法
- Advanced IP Scanner
- 2.更新数据 删除数据
- XSS过滤绕过速查表
- golang语言的办公工作流的包
- Android 跨进程启动Activity黑屏(白屏)的三种解决方案
- DialogResult的使用一
- chrome 检查和管理存储、缓存与资源
- MUI+AJAX+Spring MVC 实现照片拍摄和本地相册选取上传
- 如何设计数据库(2)?
- 【1701H1】【穆晨】【171216】连续第六十七天总结
- Android O Framework架构分析(一):以AMS视角看Activity启动过程
- 牛客网部分习题答案整理
- win10安装ubuntu卡在logo页面