在android系統中把啟動分為冷啟動,熱啟動,溫啟動。三者的過程各不相同,其中以冷啟動過程最為繁瑣,時間消耗最長。所以市面上所說的啟動優化,一般都泛指冷啟動的優化。
什麼是邏輯非同步?就是用多執行緒去替代之前單個主線程的工作,盡量保證讓oncreate流暢不被堵塞。那麼我們該怎麼設計呢?設計的思路我們可以參考gradle,將邏輯task化。
1.將原本冗餘的邏輯**區分開來,抽象成乙個task
2.確定task是否必須執行在主線程,是否必須在oncreate中執行完,執行上下是否存在依賴關係
3.設計乙個task分發管理類,負責將所有task集合後生成乙個有向無環圖,這點也是參考gradle的執行思路
public
inte***ce
itask
...
pulbic void
oncreate
()...
什麼是邏輯延遲?就是將一些優先順序不是非常高的**和邏輯延遲執行,不堵塞生命週期的方法。一般的方案可以是使用handler延遲**執行,但是這個方案是有缺陷的,有可能會影響使用者操作卡頓。比如**延遲1000ms執行,但是如果這個時候使用者正好在滑動手機操作,再加上延遲的任務比較複雜,這時使用者操作任務和延遲執行任務就會同時執行搶占cpu,然後一部分效能不好的手機就會有卡頓現象。解決方案是什麼?
idlehandler:當handler空閒的時候才會被呼叫名,如果返回true,則會一直執行,如果返回false,執行完一次後就會被移除訊息佇列。比如,我們可以將從伺服器獲取推送token的任務放在延遲handler中執行。
public
class
delayhandler
implements
messagequeue.idlehandler
}looper.myqueue().addidlehandler(new delayhandler(this))
上面的**只是最簡單的執行。
邏輯非同步,邏輯延遲,懶載入,這是啟動優化的方向。
iOS APP啟動時間優化
第乙個階段 程式啟動到main函式。第二個階段 main函式到顯示第乙個介面。1.載入可執行檔案。2.載入動態鏈結庫。3.objc 執行時的初始處理,包括 objc 相關類的註冊 category 註冊 selector 唯一性檢查等。4.初始化,包括了執行 load 方法 建立 c 靜態全域性變數...
Uboot Linux啟動時間優化
裝置啟動時間往往是專案立項時的一項重要技術指標。快速的啟動時間意味著裝置宕機時間的縮短,系統的快速恢復,也能改善使用者使用時的體驗感受,是一項重要的市場競爭力。優化啟動時間之前,我們首先要了解下我們裝置的主要啟動流程,如下圖所述,裝置啟動流程主要包含 硬體 bootloader 作業系統和應用程式 ...
Android效能優化三 APP啟動時間測量
目錄 1.1 adb命令 1.2 手動打點 2 啟動優化工具選擇 2.1 traceview 2.1.1 介紹 2.1.2 使用 2.1.3 總結 2.2 systrace 2.2.1 介紹 2.2.2 使用 2.2.3 總結 2.2.4 cputime與walltime的區別 3 優雅獲取方法耗時...