zoukankan      html  css  js  c++  java
  • Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏

      大家会发现一个空项目,从手机桌面打开app是秒启动。但是对于自己开发的项目,有时会发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面。

      个人理解为我们自己实现的Application文件里面做了较多的初始化操作,当这些初始化操作完成后才进入到第一个Activity,这段初始化的时间因为没有界面,应用便会因为主题的类别而显示白屏或者黑屏。

      

      构成白屏/黑屏的原因代码如下:

    
    
    /**
    * @author xqx
    * @email djlxqx@163.com
    * blog:http://www.cnblogs.com/xqxacm/
    * createAt 2017/1/30
    * description: 进行第三方的初始化等操作
    */
    public class XApplication extends Application{
        @Override
        public void onCreate() {
            super.onCreate();
    
    //         环信初始化
    //        EaseUI.getInstance().init(this,null);
    //        EMClient.getInstance().setDebugMode(true);
    
            // 友盟统计 普通统计场景类型
            MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType. E_UM_NORMAL);
            //禁止默认的页面统计方式,这样将不会再自动统计Activity。
            MobclickAgent.openActivityDurationTrack(false) ;
            //日志加密
            MobclickAgent.enableEncrypt(true);//6.0.0版本及以后
            //错误日志统计
            MobclickAgent.setCatchUncaughtExceptions(true);
            // 页面访问路径统计
            MobclickAgent.openActivityDurationTrack(true);
    
            // 极光
            JPushInterface.setDebugMode(true);
            JPushInterface.init(this);
        
         /....各种三方初始化  }

      解决方法,给应用的第一个Activity单独设置一个不同的主题,一般第一个Activity即为启动页。

      我们只要在res/values/styles.xml 文件中写一个主题继承自我们应用的主题

      

        <!-- Base application theme. -->
        <!-- 应用的主题. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
        </style>
    
        <!--启动页Activity主题,解决开启时1-2秒的白屏问题 , 继承自应用的主题 , 只需要给应用第一个Activity设置此主题即可,一般为启动页-->
        <style name="MyGuideTheme" parent="AppTheme">
            <!-- Customize your theme here. -->
            <item name="android:windowIsTranslucent">true</item>
            <item name="android:windowNoTitle">true</item>
        </style>

      

      然后在AndroidManifest.xml文件中,给启动页设置这个主题即可。

      

        <activity
                android:name=".ui.moduleLogin.GuideActivity"
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:screenOrientation="portrait"
                android:theme="@style/MyGuideTheme"   // 这个Activity单独设置主题
                >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>

      

      注意:1、这个解决方法会有一个bug,在小部位机型上设置了该主题的Activity,如果用户进入到最近列表(长按home键或者按菜单键)会出现闪烁问题。

            所以我们不能将整个应用的主题都设置为这个,只需要启动页设置,因为启动页只有少数的1-2秒即进入主界面,用户进入最近列表的触发可能性极低,体验较好。

            2、如果Application中初始化的东西很多,时间较长,比如超过2秒,此方法不适用,会导致用户点击icon2秒后才打开app,用户体验不佳。

  • 相关阅读:
    phpstudy下允许所有的目录科访问
    fastadmin怎么自动生成框架目录
    优化数据库
    git操作是出现Username for 'https://github.com':的验证问题
    git上传命令步骤
    mysql 组合两张表
    删除重复的电子邮箱
    Neo4j
    opencv学习笔记(2
    opencv学习笔记(1)
  • 原文地址:https://www.cnblogs.com/xqxacm/p/8471704.html
Copyright © 2011-2022 走看看