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

我一直以为只要在 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中?
这样的话做法好奇怪啊?应该有什么更直接的方案吧?

黄舟
黄舟

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

Antworte allen (5)
巴扎黑

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

    左手右手慢动作

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

    true
      PHPzhong

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

      android:name=".Activity.LoadingActivity" android:theme="@style/welcomeTheme">     
        巴扎黑

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

          左手右手慢动作

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

            Neueste Downloads
            Mehr>
            Web-Effekte
            Quellcode der Website
            Website-Materialien
            Frontend-Vorlage
            Über uns Haftungsausschluss Sitemap
            Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!