Android開機啟動效能優化
Android 開機啟動速度優化
一 在開機啟動中,可以藉助bootchart 工具分析android的啟動過程。bootchart是一個用於linux啟動過程效能分析的開源軟體工具,在系統啟動過程自動收集CPU佔用率、程序等資訊,並以圖形方式顯示分析結果,可用作指導優化系統啟動過程。
1、UBuntu下安裝bootchart工具
需要安裝的工具有兩個bootchart和pybootchartgui,執行命令如下:
點選(此處)摺疊或開啟
- sudo apt-get install bootchart
- sudo apt-get install pybootchartgui
需要注意的是:在ubuntu 10.04 版本上的bootchart 製作android 啟動圖的時候報錯,應該是10.04版本的問題。換到13.04 就可以了。
2、在Android支援bootchart
Android系統編譯時,預設的沒有開啟bootchart的編譯開關,即沒有把bootchart編譯進系統中。Android對bootchar 的支援在init 中。在init 中加入對bootchart 的支援。重新編譯init .然後把支援bootchart的系統重新燒機。
1)、系統已經編譯過,現在只是要新增bootchart進系統中,執行以下命令:‘
$ touch system/core/init/init.c
$ m INIT_BOOTCHART=true
2)、在bootchar.h 中 修改 BOOTCHART:
#ifndef BOOTCHART
# define BOOTCHART 1
#endif
重新編譯init
3)、.
export INIT_BOOTCHART=true
mmm system/core/init
3、生成bootchart 日誌
1)、將編譯生成的帶有bootchart工具的Android系統重新燒錄到開發板上,並啟動系統
2)、在UBuntu上通過adb connect連線到開發板,然後執行:
adb shell 'echo 120 > /data/bootchart-start'
3)、執行命令:
adb shell 'mkdir /data/bootchart'
4)、重新啟動開發板 ,adb connect 後檢視:
[email protected]:/data # cat bootchart-start
60
[email protected]:/data # ls bootchart
header
kernel_pacct
proc_diskstats.log
proc_ps.log
proc_stat.log
[email protected]:/data
到此為止,bootchart執行測量後生成的測量資料已經完成,看上面有3個.log檔案,下面需要將這些資料進一步處理成易讀、易分析的圖片。
4、bootchart測量結果的圖形化過程
1)、在bootchart 目錄下執行 tar –czf bootchar.tgz * 生成bootchart.tgz 。或者利用android的打包工具:system/core/init/grab-bootchart.sh 執行 grab-bootchart.sh 會自動打包在當前目錄生成bootchart.tgz。
執行bootchart -f png bootchart.tgz
[email protected]:~/ali/bin# adb devices
List of devices attached
10.32.185.29:5555 device
[email protected]:~/ali/bin# ./grab-bootchart.sh
12 KB/s (620 bytes in 0.048s)
482 KB/s (177369 bytes in 0.358s)
513 KB/s (5027077 bytes in 9.556s)
509 KB/s (329064 bytes in 0.630s)
look at bootchart.tgz
[email protected]:~/ali/bin# bootchart -f png bootchart.tgz
parsing 'bootchart.tgz'
parsing 'header'
parsing 'proc_stat.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_diskstats.log'
parsing 'kernel_pacct'
merged 0 logger processes
pruned 71 process, 0 exploders, 1 threads, and 0 runs
False
bootchart written to 'bootchart.png'
生成的啟動圖如下:
二 優化 preloaded-classes
Android開機啟動速度慢,涉及的原因很多,從硬體的角度看:EMMC flash 比NAND FLASH的速度快。從軟體的角度看主要系統上主要有兩個地方:preload classes resource和scan packages。
Android zygote 啟動的時候會預載入一些類,預載入的類根據frameworks\base\preloaded-classes 。這個是下載android程式碼的時候已經確定的。是google 給出的參考。和這個檔案相關:framework/base/tools/preload/WritePreloadedClassFile.java 在這個檔案中定義了需要預載入類的規則並且生成frameworks\base\preloaded-classes。預載入類的規則如下:
/*
* The set of classes to preload. We preload a class if:
*
* a) it's loaded in the bootclasspath (i.e., is a system class)
* b) it takes > MIN_LOAD_TIME_MICROS us to load, and
* c) it's loaded by more than one process, or it's loaded by an
* application (i.e., not a long running service)
*/
就是a)系統級的類, 載入時間大於 b) MIN_LOAD_TIME_MICROS的類 c) 被應用載入次數大於兩次的類。
MIN_LOAD_TIME_MICROS 定義如下:
static final int MIN_LOAD_TIME_MICROS = 1250;
根據這個思路和上面的分析,能夠優化的就是減少預載入的類。由於我們的產品是機頂盒不是手機,手機相關的jar包都可以裁掉,因此可以去掉這部分相關的jar包。去掉這部分的jar包,1 修改frameworks\base\preloaded-classes, 2 在android 系統中裁剪。我們的盒子的做法是裁剪:
[email protected]:~/magic$ ls out/target/product/magicbox/system/framework/
AliSecure.jar apache-xml.jar bouncycastle.jar core.jar framework-res.apk libyunos.jar requestsync.jar uiautomator.jar
am.jar AuiJar.jar bu.jar core-junit.jar ime.jar monkey.jar services.jar
android.policy.jar aui-res.apk com.android.location.provider.jar ext.jar input.jar oujavalib.jar settings.jar
android.test.runner.jar bmgr.jar content.jar framework.jar javax.obex.jar pm.jar svc.jar
但是這樣也帶來一部分額外的開銷,就是載入失敗的時間消耗。
載入完 classes 以後系統還要載入relsource 。在原生系統中,載入類和資源是一個順序的過程:
static void preload() {
preloadClasses();
preloadResources();
}
可以採用同步的方式:
private static Thread mCThread = new Thread(new Runnable(){
@Override
public void run(){
preloadClasses();
}
});
private static Thread mRThread = new Thread(new Runnable(){
@Override
public void run(){
preloadResources();
}
});
static void asyncPreload(){
try{
mCThread.start();
mRThread.start();
mCThread.join();
mRThread.join();
}catch(InterruptedException e){
Log.e(TAG,"asyncPreload failed");
}
}
這個要考慮硬體的規格:如果是多核CPU 效能可能比較好,如果是單核的,從上面的bootchart.png 上可以看出,在system_server 的啟動時間段中 CPU的利用率非常高,優化的效能也可能打折。
三Launcher的優化。
從上面的bootchart.png 中,可以看到launcher的啟動時間比較長.從啟動圖上看,這時候的CPU佔用率到了100%。在系統起來後,kill 掉launcher,啟動速度明顯加快,重新生成啟動圖,在圖上看到CPU的佔用率接近100%,說明開機的時候Launcher存在CPU競爭。
轉載地址:
http://blog.chinaunix.net/uid-21564437-id-3954560.html
相關推薦
Android開機啟動效能優化
Android 開機啟動速度優化 一 在開機啟動中,可以藉助bootchart 工具分析android的啟動過程。bootchart是一個用於linux啟動過程效能分析的開源軟體工具,在系統啟動過程自動收集CPU佔用率、程序等資訊,並以圖形方式顯示分析結果,可用作指導優化系統啟動過程。 1、UBu
支付寶 App 構建優化解析:通過安裝包重排布優化 Android 端啟動效能
1. 前言 本章節我們將圍繞《支付寶 App 構建優化解析》另啟新系列,細分拆解客戶端在“程式碼管理”、“證書管理”、“版本管理”、“構建打包”等維度的具體實現方案展開討論,帶領大家進一步瞭解支付寶在 App 構建模組下的持續優化。 本節將主要記錄通過對支付寶 Android Apk 檔案的重新佈局,來改
通過安裝包重排布優化 Android 端啟動效能
1. 前言 本章節我們將圍繞《支付寶 App 構建優化解析》另啟新系列,細分拆解客戶端在“程式碼管理”、“證書管理”、“版本管理”、“構建打包”等維度的具體實現方案展開討論,帶領大家進一步瞭解支付寶在 App 構建模組下的持續優化。 本節將主要記錄通過對支付寶 Android Apk 檔案的
Android開機啟動
sys ttext system 權限 cast cas n) gif complete 使用Android Studio幫我們創建廣播,點擊包名-->New-->BroadcastReceiver 在清單文件中會自動生成 我們加上開機廣播的action
Linux系統開機啟動項優化 命令詳解 齊天大聖原創作品 命令來自老男孩教育
開機啟動優化Linux系統開機啟動項優化 命令詳解 齊天大聖原創作品 命令來自老男孩教育
企業案例:系統開機啟動項優化 除了下面5個服務以外都關閉 crond sshd network rsyslog sysstat
企業案例:系統開機啟動項優化 除了下面5個服務以外都關閉 crond sshd network rsyslog sysstat第一步:把要執行命令的樣子顯示出來[[email protected]/* */ ~]# chkconfig|egrep "sshd|crond|rsys
支付寶客戶端架構解析:iOS 客戶端啟動效能優化初探
前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 啟動應用是使用者使用任何一款
Android 常見的效能優化
其實說白了, 效能優化主要就是圍繞如下四個方面去進行擴充套件和探索: 1, 快 --- 速度快 2, 穩 --- 穩定, 不動不動就 crash 3, 省 --- 省記憶體, 省電量,流量
Android進階——效能優化之程序拉活原理及手段完全解析(二)
引言 上一篇文章Android進階——效能優化之程序保活原理及手段完全解析(一)總結了Android程序和執行緒的相關知識,主要介紹了幾種提升程序優先順序的手段,通常僅僅是提高優先順序只能讓你的程序存活時間久一點,但是真正的被殺死之後就不會自動拉活的,如果你的程
Android面試之效能優化
前言 本文是為了面試而寫的效能優化。目的不是為了具體的深入而是對於要面試的同學在面試的時候能和麵試官說出的效能優化的方面。在面試的時候基本現在每個面試官都會問一些關於效能優化方法的問題。那麼該怎麼回答呢?面試不同於我們學習新的知識點,要完全學會,要學精,對於面試
Android應用開發效能優化完全分析
1 背景 其實有點不想寫這篇文章的,但是又想寫,有些矛盾。不想寫的原因是隨便上網一搜一堆關於效能的建議,感覺大家你一總結、我一總結的都說到了很多優化注意事項,但是看過這些文章後大多數存在一個問題就是隻給出啥啥啥不能用,啥啥啥該咋用等,卻很少有較為系統的進行真正
[魅族Degao]Android客戶端效能優化
本文由魅族科技有限公司資深Android開發工程師degao(嵌入式企鵝圈原創團隊成員)撰寫,是degao在嵌入式企鵝圈發表的第一篇原創文章,毫無保留地總結分享其在領導魅族多個專案開發中的Android
imx6 android開機啟動守護程序
由於專案中需用到自己的編寫的兩個底層命令列程式,並且讓系統開機就自啟動這兩個程式。 我把這兩個程式寫成了守護程序。並自一個shell指令碼中執行啟動這兩個程式的命令,這樣,我設定adroid開機啟動的時候就只有啟動這個指令碼就行了。 做好以上兩點,接下來就是新增相應的拷貝動
android開機啟動流程簡單分析
android啟動 當載入程式啟動Linux核心後,會載入各種驅動和資料結構,當有了驅動以後,開始啟動Android系統同時會載入使用者級別的第一個程序init(system\core\init\init.cpp)程式碼如下: int main(int ar
Android 開機啟動除錯,system_process除錯
下載,編譯,匯入,配置 作為開發者,經常會對Debug工程進行除錯,Android具有debug簽名的應用才可以被除錯,如果想除錯系統原始碼呢? 想要除錯原始碼,首先必須要有原始碼,並且保證裝置執行的原始碼和IED裡的原始碼是同一份. 下載和編譯AOSP原始碼,本人使用
Android 應用啟動時優化白屏問題
一般情況下 我們在啟動APP的時候,螢幕會出現一段時間的白屏或者黑屏,不同的裝置可能白屏黑屏顯示的時間長短不同,裝置硬體較差的時間都會比較長,這顯然影響使用者體驗。現在我們來分析這個問題產生的原因。 當我們在啟動一個應用時,系統會去檢查是否已經這樣存在一個程序
Android進階——效能優化之儘量多使用AsyncTask進行短時間網路通訊
引言 對於我們Android 開發來說,網路操作應該是最普遍不過的操作了吧,因為沒有網路操作的APP應該就沒有存在的價值吧,往往網路操作這部分又通常是耗時的,所以為了良好的使用者體驗,我們必須把耗時操作放到非UI執行緒,而實現方式有很多種,比較常見的應該就是H
那些Android中的效能優化
效能優化是一個大的範疇,如果有人問你在Android中如何做效能優化的,也許都不知道從哪開始說起。 首先要明白的是,為什麼我們的App需要優化,最顯而易見的時刻:使用者say,什麼狗屎,刷這麼久都沒反應,取關解除安裝算了。 這跟什麼有關,我們先蒼白的反駁下,尼瑪使用者裝置老舊網又爛,關我屁事,根本不用優化
Android開機啟動自動播放視訊
最近客戶有個小需求:在一個android系統平臺上一開機就自動播放SD卡某檔案目錄下的視訊檔案。 需求比較簡單,不多說了,直接貼程式碼: 1 首先配置 AndroidManifest.xml 註冊一個開機服務廣播 主要程式碼如下: <receiver android:name=".Bo
【Android】RelativeLayout效能優化,避免畫面卡頓
今天在照著書寫拖動seekbar來改變圖片的色調、飽和度和亮度的demo的時候, 發現自己的demo在拖動seekbar的時候比書上的demo要有明顯的卡頓。 一開始以為是SeekbarAPI更新的問題,我用的是26的API,書上的是21的API, 但很快這種懷疑的念頭就被