android性能優(yōu)化總結(jié)

1.繪制優(yōu)化


卡頓造成原因:

  • 界面繪制:①頁面復雜,層級較深,造成measure,layout,draw都有可能耗時較長,導致vsync信號到達時,數(shù)據(jù)無法準備好,無法刷新界面
  • 數(shù)據(jù)處理:①UI線程處理大量數(shù)據(jù),導致主線程不能及時進行界面繪制;②內(nèi)存緊張,導致頻繁GC,會阻塞主線程

優(yōu)化方式:

<1>定性分析
①在安卓的開發(fā)者模式中,打開GPU調(diào)試,當條形圖的高度高過綠色的橫線時,代表繪制耗時過長。
②在安卓的開發(fā)者模式中,打開過度繪制,當一片區(qū)域的顏色是紅色或者粉紅色時,代表UI嵌套過深,可能有無用的UI層級存在。
③使用過程中,用戶感覺到卡頓
<2>定量分析和優(yōu)化
①使用systrace,查找卡頓點,可在代碼中添加調(diào)試點,逐步排除,重點關(guān)注Alerts提示 和 Frames顏色為紅色的部分;可以使用android device monitor進行大范圍追蹤,也可在代碼中使用系統(tǒng)提供的api定量追蹤。
代碼中使用api如下:

systrace.png

android device monitor使用如下:
monitor_sys_trace.png

生成的html文件如下,下圖展示了可以優(yōu)化的點,比如繪制耗時等:
alert

②然后使用traceview查找具體耗時方法,針對優(yōu)化:
在代碼中api如下,可以生成.trace文件:


traceview.png

當然,也可以使用android device monitor,如下:


生成traceview

下面這示例可以看出:測試的testWriter()方法中,md5()方法消耗了大量時間,就可以找到優(yōu)化點,從而進行針對性優(yōu)化
example

③在android device monitor中,使用hierarchy view查看UI布局,優(yōu)化嵌套層級,示例如下:


hierarchy view

④使用android lint進行代碼檢查,可以配置各種規(guī)則,可以對代碼進行全方位的靜態(tài)檢查。

⑤自定義主線程的printer,檢測每次消息處理時間,進行卡頓定位

可優(yōu)化點

①性能framelayout>linearlayout>relativelayout,優(yōu)先使用framelayout
②減少布局層級
③使用merge減少層級,使用viewstub繪制較少使用的布局
④已知寬高,不使用wrap_content屬性
⑤界面只刷新必要的區(qū)域
⑥r(nóng)ecycleview,listview只刷新對應(yīng)的item
⑦硬件加速(api兼容問題)
⑧啟動速度優(yōu)化

2.內(nèi)存優(yōu)化


潛在問題

①頻繁GC,導致線程阻塞
②內(nèi)存泄漏,內(nèi)存一致增長

優(yōu)化點

①內(nèi)存抖動,一般現(xiàn)象為鋸齒狀的內(nèi)存狀態(tài)圖
②內(nèi)存泄漏

優(yōu)化工具

①借助leakcanary定位問題,找到內(nèi)存泄漏的頁面
②在androidstudio的profiler - memeory中,通過查看當前存在問題頁面的內(nèi)存快照,精準定位,查找泄漏點,進行問題修復。

常見內(nèi)存泄漏

①靜態(tài)類持有activity context
②handler內(nèi)存泄漏
③第三方框架未釋放
④實例變量持有fragment,導致fragment無法釋放
⑤cursor,file未關(guān)閉

常用優(yōu)化方式

①借助弱引用解決 handler內(nèi)存泄漏;;實例變量持有fragment,導致fragment無法釋放;靜態(tài)類持有activity context
②靜態(tài)類持有context,提供釋放方法,將context置null
③正確關(guān)閉文件流,cursor
④圖片優(yōu)化,圖片大小,圖片編碼,采樣率,三級緩存
⑤lru緩存優(yōu)化
⑥使用最優(yōu)數(shù)據(jù)結(jié)構(gòu),靠經(jīng)驗

3.存儲優(yōu)化


常用方式及特點

①sharedpreference:適合存儲簡單配置信息,開關(guān)等
②file:適合存儲大數(shù)據(jù),音視頻或者網(wǎng)絡(luò)內(nèi)容
③sqlite:適合存儲復雜的數(shù)據(jù)類型
④contentprovider:進程之間的數(shù)據(jù)交換

優(yōu)化點

①sharedpreference:使用apply異步存儲
②sqlite:使用sqlitestatement;使用事務(wù)一次插入多條數(shù)據(jù);使用索引提高查詢效率,異步存儲;分頁
③file:文件讀寫并發(fā)
④contentprovider:權(quán)限管理

4.穩(wěn)定性優(yōu)化


存在問題

①crash:java層,native層
②anr:觸摸事件超時5s,廣播超時10s,service超時20s

檢測工具

①java層crash,實現(xiàn)Thread.UncaughtException,捕捉異常
②anr發(fā)生時,系統(tǒng)會生成trace文件,低版本手機會有trace.txt文件,高版本手機在adb中,執(zhí)行adb bugreport,可導出anr記錄文件

保活方法,歸根結(jié)底是提高進程優(yōu)先級

①長連接保持心跳,保持進程活躍
②注冊系統(tǒng)廣播,相應(yīng)系統(tǒng)消息
③使用syncadapter提供的賬號同步機制提高進程優(yōu)先級,demo地址https://github.com/dongdaniqng/SyncAdapter
④雙進程,一像素,不推薦,流氓程序才這么干

5.耗電優(yōu)化


耗電問題

①屏幕常亮
②頻繁調(diào)用傳感器,藍牙,相機,定位,視頻,音頻等
③代碼問題,頻繁刷新,cpu使用率高,比如頻繁刷新廣告,刷新后臺任務(wù)等

優(yōu)化工具

①androidstudio profiler
②battery-historian

優(yōu)化點

①及時關(guān)閉不再使用的傳感器
②代碼合理優(yōu)化,使用workmanager或者jobscheduler優(yōu)化任務(wù)

6.安裝包體積優(yōu)化


常用方案

①代碼優(yōu)化,使用混淆
②資源優(yōu)化,使用android lint移除無用資源(存在誤刪,需要注意);配置shrinkResources;移除無用的lib,so,無用的assets目錄文件
③圖片優(yōu)化,盡量使用一套圖片文件,多個dimen尺寸文件;或者使用webp,svg圖片
④插件化,將不頻繁使用的模塊存放到服務(wù)器,然后下載
⑤第三方框架擇優(yōu)使用

7.網(wǎng)絡(luò)優(yōu)化


①Dns:解析使用httpdns;直接使用ip
②Http :版本升級,比如從1.x升級到2.x,3.x,減少三次握手時間
③Https:升級ssl/tls加密協(xié)議版本,減少https的tls握手事件
④Cdn:使用cdn,緩存一些資源,加快訪問速度

8.安全優(yōu)化


本地安全

①敏感信息加密存儲,使用keystore等,或者先加密再存儲
②apk下載安裝完整性校驗,防劫持校驗
③運行環(huán)境檢查,如root,xposed環(huán)境
④安全鍵盤
⑤防止截屏
⑥代碼安全檢查,四大組件的權(quán)限等
⑦登錄等隱私界面防劫持

網(wǎng)絡(luò)安全

①使用https
②重要信息加密傳輸

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374