android - 安卓应用冷启动如何避免开机白屏?
黄舟
黄舟 2017-04-18 09:16:42
0
5
720

我一直以为只要在 application的theme下设置background就好了,(同类型解决方法还有设置为透明)
但是今天在实际测试中发现,
在oppo m37a 上是有效果的(api 22)
但是在红米4 上发现是没有效果的!(api23)

我尝试打开红米4上多款应用发现:

  • 瞬间打开且没有白屏

    1. 高德地图

    2. 掘金

    3. segmentfault

    4. 手机淘宝

    5. 印象笔记

    6. 等。。。

  • 有白屏

    1. 知乎日报

    2. 扇贝单词

    3. 人民日报

    4. 摩拜单车

  • 没有白屏,但是点击icon 会延迟一会才打开

    1. 简书

    2. UC浏览器

    3. 支付宝

    如果是白屏或者是“延迟打开”,我觉得可以办到

那要怎样才能做到segmentfault ,手机淘宝这样呢?

启动第一个activity,这个activity 只是为了作为背景显示,把一些初始化的工作放到第2个activity中?
这样的话做法好奇怪啊?应该有什么更直接的方案吧?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(5)
巴扎黑

要设background也应该是windowBackground,不需要2个activity来实现,如果到这种地步,很有可能你的application或mainactivity做了太多主线程工作了。

左手右手慢动作

把启动设置为透明,在主题文件中添加如下代码

<item name="android:windowDisablePreview">true</item>
PHPzhong

<style name="welcomeTheme" parent="AppTheme">

    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

设置主题 然后在这里引用即可
<activity

        android:name=".Activity.LoadingActivity"
        android:theme="@style/welcomeTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    
巴扎黑

若是在application中所做工作过多的话,我倒是有一个简单的方法,可以通过多进程方式按进程启动,次进程负责主进程启动初始化时启动一个屏保界面,当主进程完成初始化发送给次进程退出,主进程界面启动,这样就避免application初始化过大导致首次启动过慢的问题。

左手右手慢动作

先理清为什么白屏, 然后根据自己业务代码修改.
当桌面图标被点击后, 会打开App的第一个Activity.在Activity被创建前可能还有Application会被创建, 知道Activity的onResume执行后才真正看到第一个页面.在此之前,可以理解为就是白屏时间(使用黑科技修改theme不考虑).所以减少白屏,就是减少这几个流程所消耗的时间,简单粗暴的方法就是把这些依赖包的初始化都放到Splash页面onResume后执行
好懒,不想打字...
实际上遇到各种问题,都需要自己解决.比如初始化只需要几百毫秒,Splash太快跳转了,可以加多一点实际判断.比如没有Splash页面,可以把初始化放到首页,初始化完再执行其他操作.再比如重复初始化,可以添加一个static变量标记是否已初始化.
总结就是找到哪些地方占据了第一个Activity的onResume之前的时间,针对优化(还可能是图片解析,布局渲染...)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!