引言
通常來講,咱們都會将本身的産品與同類的産品進行個比對,不可避免的會去作些性能優化,以達到賽過其餘産品的優點。是以,今天咱們就來說講性能優化的方方面面。css
一般咱們所說的性能優化,會從如下幾個方面入手:
1. APP啟動速度優化
2. APP UI流暢度優化
3. 記憶體優化
4. APP瘦身
5. 電量優化java
APP啟動速度優化
(1)初識啟動方式
APP啟動的方式分為3種:;冷啟動、熱啟動、溫啟動。
-冷啟動:應用程式從頭開始,須要作大量的工做,耗費的時間最多。
-熱啟動:系統會把你的活動放在前台,活動有駐留在記憶體中,好比按了home鍵。相對于冷啟動,開銷較低。
-溫啟動:使用者退出應用程式,随後又從新啟動,可是活動的程序是有駐留在背景的,好比按了back鍵退出應用。android
(2)為何白屏?啟動慢?
一、Application的onCreate流程,通常來講,在這個方法會進行大量的通用元件的初始化工做;
二、Activity的onCreate流程,布局太過複雜,緻使UI布局渲染耗時,影響啟動性能。
(3)解決辦法
第一種方法:主題切換。這是治标不治本的問題,隻是改善了互動的友好性。
主題theme_bg:其中android:opacity=”opaque”參數是為了防止在啟動的時候出現背景的閃爍。web
android:opacity="opaque">
android:src="@mipmap/ic_launcher" />
android:src="@drawable/launch_screens" />
android:src="@mipmap/ic_launcher" />
樣式style:資料庫
在manifest中,将啟動頁的主題設定為咱們定義的主題AppTheme.Launcher:緩存
android:theme="@style/AppTheme.Launcher">
在MainActivity中,切換回原來的主題:性能優化
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//切換回原來的主題,必須在setContentView前調用
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_main);
}
第二種方法:異步加載、延遲加載、多程序時按照程序區分進行一些初始化工做等。
主要有如下幾種狀況須要延遲加載:markdown
該段文本轉載自:http://www.jianshu.com/p/f5514b1a826c
1.資料庫及IO操做都移到工做線程,而且設定線程優先級為THREAD_PRIORITY_BACKGROUND,這樣工做線程最多能擷取到10%的時間片,優先保證主線程執行。
2.流程梳理,延後執行;
實際上,這一步對項目啟動加速最有效果。經過流程梳理發現部分流程調用時機偏早、失誤等,例如:
更新等操做無需在首屏還沒有展現就調用,形成資源競争;
調用了IOS為了規避稽核而作的開關,形成網絡請求密集;
自有統計在Application的調用裡建立數量固定為5的線程池,形成資源競争,在上圖traceview功能說明圖中最後一行能夠看到編号12執行5次,耗時排名前列;此處線程池的建立是必要但能夠延後的。
修改廣告閃屏邏輯為下次生效。
3.其它優化;
去掉無用但被執行的老代碼;
去掉開發階段使用但線上被執行的代碼;
去掉重複邏輯執行代碼;
去掉調用三方SDK裡或者Demo裡的多餘代碼;
資訊緩存,經常使用資訊隻在第一次擷取,以後從緩存中取;
項目是多程序架構,隻在主程序執行Application的onCreate();
具體操做:在啟動頁Activity或ManiActivity的onCreate中進行延遲操做網絡
getWindow().getDecorView().post(new Runnable() {
@Override
public void run() {
myHandler.post(mLoadingRunnable);
}
});
相關連接配接:
架構