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

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

黄舟
黄舟

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

répondre à tous(5)
巴扎黑

Si vous souhaitez définir background, cela devrait également l'être windowBackground Vous n'avez pas besoin de deux activités pour l'implémenter. Si cela atteint ce point, il est très probable que votre application ou activité principale le fasse aussi. beaucoup de travail sur le fil principal.

左手右手慢动作

Définissez le démarrage sur transparent et ajoutez le code suivant au fichier de thème

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

Définissez le thème et citez-le ici
<activité

        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>
    
巴扎黑

Si vous devez faire trop de travail dans l'application, j'ai une méthode simple, qui peut être démarrée par processus via le mode multi-processus. Le processus secondaire est responsable du démarrage d'une interface d'économiseur d'écran lorsque le processus principal est démarré et. initialisé. Lorsque le processus principal termine l'initialisation, il est envoyé à Le processus secondaire se termine et l'interface du processus principal démarre. Cela évite le problème d'un démarrage initial trop lent causé par une initialisation excessive de l'application.

左手右手慢动作

Expliquez d'abord pourquoi l'écran blanc est blanc, puis modifiez-le en fonction de votre propre code d'entreprise.
Lorsque vous cliquez sur l'icône du bureau, la première activité de l'application sera ouverte. Avant la création de l'activité. L'application peut être créée. Savoir La première page est effectivement vue après l'exécution du onResume de l'activité. Avant cela, cela peut être compris comme le temps d'écran blanc (l'utilisation de la technologie noire pour modifier le thème n'est donc pas prise en compte). signifie réduire le temps consommé par ces processus. , la méthode simple et grossière consiste à mettre l'initialisation de ces packages dépendants sur la page Splash et à l'exécuter après onResume
Je suis tellement paresseux que je ne veux pas taper. ..
En fait, lorsque vous rencontrez divers problèmes, vous devez les résoudre vous-même. Par exemple, l'initialisation uniquement Cela prend des centaines de millisecondes. Splash saute trop rapidement. Par exemple, s'il y en a. pas de page Splash, vous pouvez mettre l'initialisation sur la page d'accueil, puis effectuer d'autres opérations après l'initialisation. Pour un autre exemple, si vous répétez l'initialisation, vous pouvez ajouter une variable statique pour marquer si Initialisée.
Le résumé est de. trouver quelles places occupent le temps avant la reprise de la première Activité, pour optimisation (cela peut aussi être de l'analyse d'images, du rendu de mise en page...)

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal