天天看點

Android項目實戰(四十二):啟動頁優化,去除短暫白屏或黑屏

原文: Android項目實戰(四十二):啟動頁優化,去除短暫白屏或黑屏

  大家會發現一個空項目,從手機桌面打開app是秒啟動。但是對于自己開發的項目,有時會發現打開app的時候,會有短暫的1秒--2秒的白屏或者黑屏,然後才進入到程式界面。

  個人了解為我們自己實作的Application檔案裡面做了較多的初始化操作,當這些初始化操作完成後才進入到第一個Activity,這段初始化的時間因為沒有界面,應用便會因為主題的類别而顯示白屏或者黑屏。

  

  構成白屏/黑屏的原因代碼如下:

/**
* @author xqx
* @email [email protected]
* 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,使用者體驗不佳。

繼續閱讀