泉州最專業(yè)手機(jī)網(wǎng)站建設(shè)定制網(wǎng)站網(wǎng)絡(luò)推廣服務(wù)
簡述
在Android App使用過程中,對于應(yīng)用的優(yōu)化是一個加分項,舉個例子,打開你的App需要2秒,人家0.5秒,這就是很大的用戶體驗上的優(yōu)化。
問題的產(chǎn)生
在開發(fā)中,我們在啟動app的時候,屏幕會出現(xiàn)一段時間的白屏或者黑屏,不同設(shè)備時間長短不同。很影響用戶體驗。 首先分析一下,產(chǎn)生這個現(xiàn)象的原因,當(dāng)我們在啟動一個應(yīng)用時,系統(tǒng)會去檢查是否已經(jīng)存在這樣一個進(jìn)程,如果不存在,就是冷啟動。系統(tǒng)和APP本身都有很多工作需要處理。首先系統(tǒng)的服務(wù)會先檢查startActivity中的intent的信息,然后在去創(chuàng)建進(jìn)程,最后才是執(zhí)行啟動Acitivy的操作。而我們上面提到的顯示白黑屏的問題,就是在這段時間內(nèi)產(chǎn)生的。
流程圖解如下:
白屏黑屏解決方案
在自己的中加入windowsbackground
,這樣,在App啟動的時候就會直接彈出設(shè)置的背景
設(shè)置windowbackground為透明的 true
前面兩種方法都有一個問題,就是在所有Activity啟動的時候都會先顯示這個默認(rèn)的圖片,如果是透明的話會出現(xiàn)點了圖標(biāo)沒反映的情況
單獨制作一個主題
<style name="AppTheme.Launcher"><item name="android:windowBackground">@drawable/bg</item></style><style name="AppTheme.Launcher1"><item name="android:windowBackground">@drawable/bg</item></style><style name="AppTheme.Launcher2"><item name="android:windowBackground">@drawable/bg</item></style>
然后在Menifest中相應(yīng)的Activity下設(shè)置
<activity android:theme="@style/AppTheme.Launcher"
然后在程序中使用
setTheme(R.style.AppTheme);
讓APP中所有的activity還是使用以前的樣式,這樣做就只有啟動時才使用自己的樣式
介紹下qq中方式,在style中設(shè)置下面的屬性
關(guān)閉預(yù)顯示
<item name="android:windowDisablePreview">true</item>
背景設(shè)置為空
<item name="android:windowBackground">@null</item>
1234
qq比較牛逼的一點是他在Application中不初始化任何的東西,將啟動時間優(yōu)化到極致,下面會講到具體的方法
其實大多數(shù)應(yīng)用不需要做到像qq那樣啟動速度快到極致,像騰訊系、阿里系的一些應(yīng)用都是只顯示一張圖片,然后開始顯示一個3秒左右的廣告,在顯示廣告的時間里進(jìn)行一些初始化
TRACE工具分析代碼執(zhí)行時間
黑白屏的優(yōu)化只是表面上的優(yōu)化,只是做到讓用戶覺得啟動速度很快,但實際啟動速度一點都沒變,下面就該介紹真正的啟動優(yōu)化
工欲善其事,必先利器其器,google小姐已經(jīng)為我們準(zhǔn)備好了工具
Debug.startMethodTracing(filePath);
中間為需要統(tǒng)計執(zhí)行時間的代碼
Debug.stopMethodTracing();
或者直接使用Android Device file Explorer導(dǎo)出的文件
adb pull /storage/emulated/0/app1.trace把文件拉出來分析
把pull到電腦上的文件拖到AS中就可以分析了
查看頁面啟動時間
sdk版本4.4以前
通過命令
adb shell am start -W com.lqr.wechat/com.lqr.wechat.activity.SplashActivity
可以查看頁面的啟動時間
ThisTime:最后一個啟動的Activity的啟動耗時;
TotalTime:自己的所有Activity的啟動耗時;
WaitTime: ActivityManagerService啟動App的Activity時的總時間(包括當(dāng)前Activity的onPause()和自己Activity的啟動)。
AM.java在系統(tǒng)源碼中的路徑
frameworks\base\cmds\am\src\com\android\commands\am
在Android開發(fā)中還有許多要優(yōu)化的東西,這篇主要理解了啟動優(yōu)化中的黑白屏優(yōu)化。其主要為問題的產(chǎn)生及解決方案;更多有關(guān)Android優(yōu)化的知識;可以參考《Android核心優(yōu)化類目》里面記錄了大部分的核心優(yōu)化板塊技術(shù)。
最后APP啟動時間優(yōu)化
優(yōu)化方案:
1.開線程
內(nèi)部沒有創(chuàng)建handler 沒有操作UI的事件 對異步要求不高
2.懶加載
用到的時候再初始化,如網(wǎng)絡(luò),數(shù)據(jù)庫操作