大家會發現一個空項目,從手機桌面打開app是秒啟動。但是對於自己開發的項目,有時會發現打開app的時候,會有短暫的1秒--2秒的白屏或者黑屏,然後才進入到程式界面。 個人理解為我們自己實現的Application文件裡面做了較多的初始化操作,當這些初始化操作完成後才進入到第一個Activity,這段 ...
大家會發現一個空項目,從手機桌面打開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,用戶體驗不佳。