相信每一個app都須要一個閃屏頁 就是一個開始頁面 對於新手來講 可能就直接一個activity 弄個背景圖片 ,細心地同窗也許會發現 每次啓動 應用程序的時候 一開始顯示的不是那個設置的背景圖片 而是白色或黑色背景 可能時間很短 這是爲何呢 。再看看其餘市面上的應用都是一開始就是顯示背景圖片 而沒有白色背景 研究了好久 其實 設置一下主題就好了 給activity設置主題 屬性android
<style name="Appstyle" parent="AppTheme"> //閃屏頁圖片 <item name="android:windowBackground">@mipmap/splashscreen</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> </style>
進階app
應用App一般會設置一個固定的閃屏頁展現時間,例如2000ms,因此咱們能夠根據用戶手機的運行速度,對展現時間作出調整,可是總時間仍然爲 2000ms。ide
閃屏頁政展現總時間 = 組件初始化時間 + 剩餘展現時間。優化
也就是2000ms的總時間,組件初始化了800ms,那麼就再展現1200ms便可。spa
Application 初始化後會調用 attachBaseContext()
方法,再調用 Application 的 onCreate()
,再到入口 Activity的建立和執行 onCreate()
方法。因此咱們就能夠在 Application 中記錄啓動時間。.net
//記錄Application初始化時間 @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); SPUtil.putLong("application_attach_time", System.currentTimeMillis()); // Log.e("TAG", "attachBaseContext: "+System.currentTimeMillis() ); }
有了啓動時間,咱們得知道入口的 Acitivty 顯示給用戶的時間(View繪製完畢),在博客( View的工做流程)中瞭解到,在onWindowFocusChanged()
的回調時機中表示能夠獲取用戶的觸摸時間和View的流程繪製完畢,因此咱們能夠在這個方法裏記錄顯示時間。code
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (SPUtil.cha("application_attach_time")){ long appAttachTime = SPUtil.getLong("application_attach_time"); //從application到入口Acitity的時間 diffTime = System.currentTimeMillis() - appAttachTime; // Log.e("TAG", "onWindowFocusChanged: "+diffTime ); } }
因此咱們就能夠動態的設置應用閃屏的顯示時間,儘可能讓每一部手機展現的時間一致,這樣就不會讓手機配置較低的用戶感受漫長難熬的閃屏頁時間(例如初始化了2000ms,又要展現2000ms的閃屏頁時間.),優化用戶體驗。blog