App啟動(dòng)優(yōu)化更優(yōu)實(shí)踐
做Android開發(fā),一定寫給過啟動(dòng)頁,在這里做一些初始化的操作,還有就是顯示推廣信息。
很普通的一個(gè)頁面,以前測(cè)試也給我提出過bug,應(yīng)用在啟動(dòng)的時(shí)候,有時(shí)候有白屏/黑屏。當(dāng)時(shí)能做的就是盡量較少耗時(shí)操作,上面醫(yī)生的文章里也有提到,但是通過主題的方式優(yōu)化這個(gè)問題之前還真是不知道的。
下面主要總結(jié)一下通過主題的方式優(yōu)化啟動(dòng)頁(醫(yī)生還提到了在子線程初始化和使用IntentService初始化,都是屬于異步初始化,還有延遲初始化,就不說了)
通過修改主題優(yōu)化啟動(dòng)時(shí)白屏/黑屏
原理請(qǐng)移步到醫(yī)生的文章,我就不復(fù)述了,之所以會(huì)看到白屏或者黑屏,是和我們的主題有關(guān)系的,因?yàn)橄到y(tǒng)默認(rèn)使用的主題,背景色就是白色/黑色。那么我們自定義一個(gè)主題,讓默認(rèn)的樣式就是我們想要的,就優(yōu)化了白屏/黑屏的問題。
首先,我們自定義一個(gè)主題,設(shè)置一個(gè)我們想要的背景
- <!-- 啟動(dòng)頁主題 -->
- <style name="SplashTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
- <item name="android:windowBackground">@drawable/start_window</item>
- </style>
自定義背景start_window.xml
- <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:opacity="opaque">
- <!-- The background color, preferably the same as your normal theme -->
- <item android: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>
***,在清單文件設(shè)置啟動(dòng)頁使用我們自定義的主題
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns: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">
- <!-- 啟動(dòng)頁 -->
- <activity
- android:name=".SplashActivity"
- android:theme="@style/SplashTheme">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <!-- 主頁 -->
- <activity android:name=".MainActivity" />
- </application>
- </manifest>
到此大功告成,為了體現(xiàn)出效果,在啟動(dòng)頁加載之前,我們模擬一個(gè)白屏/黑屏的延時(shí)操作
- public class SplashActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // 模擬系統(tǒng)初始化 白屏、黑屏
- SystemClock.sleep(1000);
- setContentView(R.layout.activity_splash);
- // 啟動(dòng)后 停留2秒進(jìn)入到主頁面
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- Intent intent = new Intent(SplashActivity.this, MainActivity.class);
- startActivity(intent);
- finish();
- }
- }, 2000);
- }
- }