首页  >  问答  >  正文

android - 安卓应用冷启动如何避免开机白屏?

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

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

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

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

黄舟黄舟2765 天前722

全部回复(5)我来回复

  • 巴扎黑

    巴扎黑2017-04-18 09:18:42

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

    回复
    0
  • ringa_lee

    ringa_lee2017-04-18 09:18:42

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

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

    回复
    0
  • PHPz

    PHPz2017-04-18 09:18:42

    <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>
        

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:18:42

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

    回复
    0
  • ringa_lee

    ringa_lee2017-04-18 09:18:42

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

    回复
    0
  • 取消回复