Android冷啟動時間優化
</p>
原文出處:http://blog.waynell.com/android/2015/11/17/android-cold-start.html
冷啟動時間是指當用戶點擊你的app那一刻到系統調用Activity.onCreate()之間的時間段。在這個時間段內,WindowManager會先加載app主題樣式中的windowBackground做為app的預覽元素,然后再真正去加載activity的layout布局
冷啟動時間優化
知道了Android冷啟動時間的原理之后,就可以通過一些小技巧來對冷啟動時間進行優化,從而讓你app加載變得”快“一些(視覺體驗上的快)。我們可制作一個啟動Activity的背景樣式的.9圖片,然后把這個.9圖片做為windowBackground。
</p>
這里推薦使用 MaterialColdStart 這個庫來制作我們.9圖片。
-
首先
</li>git clone https://github.com/DreaminginCodeZH/MaterialColdStart
-
由于該庫中引用了子模塊 AndroidSVGScripts, 所以我們需要把該子模塊也update下來,否則無法運行。但是作者定義該子模塊的時候使用了ssh協議,所以會導致我們無法update,這里我們要先修改
</li>.gitmodules
文件將里面所有的git@github.com:
改為https://github.com/
就可以了,然后執行git submodule init
和git submodule update
命令就可在把子模塊update下來了 -
在生成.9圖片之前,我們還需要根據自己的項目修改生成.9圖片的配置文件,打開
</li>colors.conf
文件,可以配置statusbar、actionbar、background的顏色等,修改raw-xxx目錄下的window_background_statusbar_toolbar_tab.9.shsvg.conf
文件可以配置statusbar、actionbar的高度等 -
最后執行
</li> </ul>./gen-png.sh
命令,就可以在gen目錄下生成我們所需的.9圖片了圖片制作好之后,我們就可以用它做為app冷啟動階段的預覽元素,如下設置:
-
為啟動的Activity自定義一個Theme
<style name="AppTheme.Launcher"> <item name="android:windowBackground">@drawable/window_background_statusbar_toolbar_tab</item> </style>
</li> -
將新的Theme應用到設置到
AndroidManifest.xml
中<activity android:name=".MainActivity" android:theme="@style/AppTheme.Launcher">
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity></pre></li>
-
由于給MainActivity設置了一個新的Theme,這樣做會覆蓋原來的Theme,所以在MainActivity中需要設置回原來的Theme
</li> </ul>public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) {
// Make sure this line comes before calling super.onCreate(). setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState); } }</pre>
效果預覽
第一張是啟用了冷啟動優化,第二張是沒有啟用冷啟動優化
-