App啟動優化最佳實踐

983535198 8年前發布 | 5K 次閱讀 安卓開發 Android開發 移動開發

做Android開發,一定寫給過啟動頁,在這里做一些初始化的操作,還有就是顯示推廣信息。

很普通的一個頁面,以前測試也給我提出過bug,應用在啟動的時候,有時候有白屏/黑屏。當時能做的就是盡量較少耗時操作,上面醫生的文章里也有提到,但是通過主題的方式優化這個問題之前還真是不知道的。

下面主要總結一下通過主題的方式優化啟動頁(醫生還提到了在子線程初始化和使用IntentService初始化,都是屬于異步初始化,還有延遲初始化,就不說了)

效果圖

通過修改主題優化啟動時白屏/黑屏

原理請移步到醫生的文章,我就不復述了,之所以會看到白屏或者黑屏,是和我們的主題有關系的,因為系統默認使用的主題,背景色就是白色/黑色。那么我們自定義一個主題,讓默認的樣式就是我們想要的,就優化了白屏/黑屏的問題。

首先,我們自定義一個主題,設置一個我們想要的背景

<!-- 啟動頁主題 -->
<stylename="SplashTheme"parent="@style/Theme.AppCompat.Light.NoActionBar">
<itemname="android:windowBackground">@drawable/start_window</item>
</style>

自定義背景 start_window.xml

<layer-listxmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme -->
<itemandroid:drawable="@android:color/holo_blue_dark"/>
<!-- Your product logo - 144dp color version of your app icon -->
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher"/>
</item>
</layer-list>

最后,在清單文件設置啟動頁使用我們自定義的主題

<?xml version="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.bitmain.launchtimedemo">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- 啟動頁 -->
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- 主頁 -->
<activityandroid:name=".MainActivity"/>
</application>

</manifest>

到此大功告成,為了體現出效果,在啟動頁加載之前,我們模擬一個白屏/黑屏的延時操作

publicclassSplashActivityextendsAppCompatActivity{

@Override
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// 模擬系統初始化 白屏、黑屏
 SystemClock.sleep(1000);
 setContentView(R.layout.activity_splash);
// 啟動后 停留2秒進入到主頁面
newHandler().postDelayed(newRunnable() {
@Override
publicvoidrun(){
 Intent intent = newIntent(SplashActivity.this, MainActivity.class);
 startActivity(intent);
 finish();
 }
 }, 2000);
 }
}

 

來自:http://kongqw.com/2016/11/14/2016-11-14-App啟動優化最佳實踐/

 

 本文由用戶 983535198 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!