解決Android首次啟動APP時,顯示空白頁或者黑屏時間長的問題
阿新 • • 發佈:2018-12-31
問題描述: 第一次啟動app(冷啟動,如果不明白冷啟動和熱啟動的話,可以百度一下),會出現白屏或者黑屏,而且當代碼量增多的時候,出現的時間很長。這樣的使用者體驗多不好。下面我寫了一個小例子,先模擬一下該問題的效果圖,以及解決問題後的效果圖。處理前有空白頁如圖1,解決後效果如圖2:
寫的例子很簡單,開啟app,顯示歡迎頁面,兩秒後進入主頁。上面可以明顯看到在啟動app後,出現一個白屏後才顯示歡迎頁圖片。
這時候啟動app可以看出,沒有了白屏,直接顯示歡迎頁圖片。
解決方案: 之前因為自己對於這個問題的解決方案不是很理解,所以原來寫的這篇部落格,只是闡述了一下對於這個問題的一個觀點。所以今天進行一下修改,下面我先說一種官方解決方案:系統載入一個Activity的時候,首先讀取當前Activity的Theme
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar" >
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<!--歡迎頁面主題-->
<style name="AppTheme.NoActionBar.FullScreen">
<item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@mipmap/welcome_page</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
AndroidManifest中配置歡迎頁WelcomeActivity指定需要載入的style。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blueskygrid.test2">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
<activity android:name=".begin.WelcomeActivity"
android:theme="@style/AppTheme.NoActionBar.FullScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
WelcomeActivity.xml
public class WelcomeActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_welcome);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
finish();
}
}, 2000);
}
}
這一種解決方案簡單而且效果比較好。上面只是說了怎麼去做,但是並沒有說為什麼這麼做。我在網上搜索一些資料時,發現一篇文章,寫的很好,圖文並茂。這篇文章詳細的說明了為什麼這樣做,並且還列出了很多種處理白屏或者黑屏問題的方案,強烈推薦大家看這篇文章