美文网首页
Android 冷启动与跨进程启动黑屏问题

Android 冷启动与跨进程启动黑屏问题

作者: 王朋6 | 来源:发表于2020-03-11 17:57 被阅读0次

原文链接:http://www.cnblogs.com/feidu/p/8057012.html

当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

true@android:color/transparenttruetrue

分析:该解决方案适合跨进程启动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 冷启动与跨进程启动黑屏问题

    原文链接:http://www.cnblogs.com/feidu/p/8057012.html 当Android...

  • iOS 启动优化(一)

    “冷启动”与“热启动” 主要区别: 名称区别冷启动启动时,App的进程不在系统里,需要开启新进程。热启动启动时,A...

  • android 冷启动白屏黑屏

    前言: 当我们开发APP时如果不对其做任何处理,启动则会根据主题显示白色或者黑色,而这种情况对于用户来说体验性则不...

  • Android项目优化-冷启动优化

    APP启动优化主要解决app启动缓慢,白屏半天的问题。 app启动方式主要为:冷启动和热启动 冷启动:当进程关掉,...

  • 关于App启动速度优化

    冷启动、热启动 冷启动:App启动前,它的进程不在系统里,系统新创建一个进程分配给它启动;热启动:App冷启动后,...

  • Android 优化——启动优化

    Android 优化目录 App 启动方式 冷启动App 没有启动过或 App 进程被杀,系统中不存在该 App ...

  • Android冷启动白屏黑屏处理

    最近项目中点击启动应用的时候都有一段时间的白屏,这会给人一种卡顿的感觉。注意看了下,手机上有不少应用也有这样的问题...

  • Android冷启动白屏黑屏处理

    一、冷启动会有黑白屏现原因Android冷启动黑白屏现象其实是因为activity的window背景颜色二、解决办...

  • 冷启动优化

    冷启动是什么:系统没有该应用进程,重新创建进程 热启动:已有进程,从后台切换到前台 冷启动和热启动的区别: 冷:重...

  • android应用冷启动

    1 什么是冷启动 冷启动/热启动,冷启动消耗时间最长,冷启动就是在启动应用前,系统中没有该应用的任何进程信...

网友评论

      本文标题:Android 冷启动与跨进程启动黑屏问题

      本文链接:https://www.haomeiwen.com/subject/udeunctx.html