Android優(yōu)化方向

本著針對(duì)面試玩徊,不負(fù)責(zé)任的態(tài)度的榛,寫下《面試總結(jié)》系列琼了。本系列記錄面試過程中各個(gè)知識(shí)點(diǎn),而不是入門系列夫晌,如果有不懂的自行學(xué)習(xí)雕薪。

不負(fù)責(zé)任系列

內(nèi)存泄露

  1. 什么是內(nèi)存泄露,為什么會(huì)引發(fā)
  2. Android垃圾回收機(jī)制

頻繁GC

耗電問題

OOM問題

原因

  1. UI線程做輕微耗時(shí)操作晓淀,導(dǎo)致UI線程卡頓
  2. 布局layout過于復(fù)雜所袁,無法在16ms內(nèi)完成渲染
  3. 同一時(shí)間段內(nèi)執(zhí)行動(dòng)畫過多,導(dǎo)致cpu或gpu負(fù)載過重
  4. 復(fù)雜的布局凶掰,頻繁觸發(fā)measure燥爷,layout,導(dǎo)致整個(gè)view從新渲染
  5. 內(nèi)存頻繁gc
  6. 冗余資源及邏輯導(dǎo)致加載緩慢
  7. 工作線程設(shè)置位background懦窘,導(dǎo)致后臺(tái)線程搶占UI線程前翎,阻塞渲染操作
  8. 排查靜態(tài)變量

手段

  1. gpu過渡重繪,開發(fā)者選項(xiàng)打開顯示重繪區(qū)域畅涂,定位到過去港华,解布局
  2. 打開嚴(yán)格模式,解決主線程耗時(shí)的操作午衰,讀寫文件等
  3. traceView立宜,檢查可能是ui線程操作的耗時(shí)問題冒萄,view的measure、layout是不是耗時(shí)過多
  4. leakcanary
  5. forloop/ondraw
  6. 優(yōu)化gson的序列化赘理、反序列化宦言,使用流配合gson序列化、提高性能20%
  7. viewstub商模、merge
  8. 加載優(yōu)化
    a. 分步加載
    b. 異步加載
    c. 延時(shí)加載
  9. 刷新優(yōu)化
    a. 縮小刷新區(qū)域
    b. 減少刷新次數(shù)
  10. 動(dòng)畫優(yōu)化奠旺、硬件加速
  11. 耗電優(yōu)化、batteryhistorian

性能優(yōu)化最佳實(shí)踐

1.布局優(yōu)化
優(yōu)化細(xì)節(jié)
  1. 如果父控件有顏色施流,也是自己需要的顏色响疚,那么就不必在子控件加背景顏色
  2. 如果每個(gè)自控件的顏色不太一樣,而且可以完全覆蓋父控件瞪醋,那么就不需要再父控
    件上加背景顏色
  3. 盡量減少不必要的嵌套
  4. 能用LinearLayout和FrameLayout忿晕,就不要用RelativeLayout,因?yàn)镽elativeLayout控
    件相對(duì)比較復(fù)雜银受,測(cè)繪也想要耗時(shí)践盼。
優(yōu)化細(xì)節(jié)
  1. 使用include和merge增加復(fù)用,減少層級(jí)
  2. ViewStub 按需加載宾巍,更加輕便
優(yōu)化細(xì)節(jié)
  1. 復(fù)雜界面可選擇ConstraintLayout咕幻,可有效減少層級(jí)
2.繪制優(yōu)化
優(yōu)化細(xì)節(jié)
  1. onDraw 中不要?jiǎng)?chuàng)建新的局部對(duì)象
  2. onDraw 方法中不要做耗時(shí)的任務(wù)
3.內(nèi)存優(yōu)化

基本可以分為以下四大類: 1、集合類 泄漏 2顶霞、單例/靜態(tài)變量造成的內(nèi)存泄漏 3肄程、匿名內(nèi)部類/非靜態(tài)內(nèi)部類 4、資源 未關(guān)閉造成的內(nèi)存泄漏

優(yōu)化細(xì)節(jié)
  1. 集合類泄漏
  2. 單例/靜態(tài)變量造成的內(nèi)存泄漏
  3. 匿名內(nèi)部類/非靜態(tài)內(nèi)部類
  4. 資源未關(guān)閉造成的內(nèi)存泄漏
優(yōu)化細(xì)節(jié)
  1. 解決各個(gè)情況下的內(nèi)存泄漏选浑,注意平時(shí)代碼的規(guī)范蓝厌。
4.啟動(dòng)優(yōu)化

官方給建議是: 1、利用提前展示出來的 Window古徒,快速展示出來一個(gè)界 面拓提,給用戶快速反饋的體驗(yàn); 2、避免在啟動(dòng)時(shí)做密集沉重的初始化(Heavy app initialization); 3隧膘、避免 I/O 操作崎苗、反序列化、網(wǎng)絡(luò)操作舀寓、布局嵌套等胆数。

  1. 利用提前展示出來的 Window,快速展示出來一個(gè)界面
  2. 避免在啟動(dòng)時(shí)做密集沉重的初始化
  3. 避免 I/O 操作互墓、反序列化必尼、網(wǎng)絡(luò)操作、布局嵌套等。
優(yōu)化細(xì)節(jié)
  1. 利用提前展示出來的Window判莉,快速展示出來一個(gè)界面豆挽,給用戶快速反饋的體驗(yàn);
  2. 避免在啟動(dòng)時(shí)做密集沉重的初始化(Heavy app initialization);
  3. 避免I/O操作、反序列化券盅、網(wǎng)絡(luò)操作帮哈、布局嵌套等。
5.包體積優(yōu)化

assets 文件夾 存放一些配置文件锰镀、資源文件娘侍,assets 不會(huì)自動(dòng)生成對(duì)應(yīng)的 ID, 而是通過 AssetManager 類的接口獲取泳炉。
res目錄 res 是 resource 的縮寫憾筏,這個(gè)目錄存放資源文件,會(huì)自動(dòng)生成對(duì)應(yīng)的 ID 并映射到 .R 文件中花鹅,訪問直接使用資源 ID氧腰。
META-INF 保存應(yīng)用的簽名信息,簽名信息可以驗(yàn)證 APK 文件的完整性刨肃。 AndroidManifest.xml 這個(gè)文件用來描述 Android 應(yīng)用的配置信息古拴,一些組件的
注冊(cè)信息、可使用權(quán)限等真友。
classes.dex Dalvik 字節(jié)碼程序黄痪,讓 Dalvik 虛擬機(jī)可執(zhí)行,一般情況下锻狗,Android 應(yīng) 用在打包時(shí)通過 Android SDK 中的 dx 工具將 Java 字節(jié)碼轉(zhuǎn)換為 Dalvik 字節(jié) 碼。
resources.arsc 記錄著資源文件和資源 ID 之間的映射關(guān)系焕参,用來根據(jù)資源 ID 尋找資源轻纪。

  1. lint工具,減小無用資源叠纷,同時(shí)build文件中開啟資源壓縮
  2. xml刻帚,drawable單色圖像
  3. 重用資源
  4. 壓縮png、jpg等圖像
  5. 使用webp
  6. 使用矢量圖
  7. 代碼混淆涩嚣、proguard工具
  8. 插件化
優(yōu)化細(xì)節(jié)
  1. 代碼混淆
  2. 插件化
  3. 資源優(yōu)化
6.耗電優(yōu)化
優(yōu)化細(xì)節(jié)
  1. 使用JobScheduler調(diào)度任務(wù)
  2. 使用懶惰法則(減小崇众、退出、合并)
7.ListView 和 Bitmap 優(yōu)化
  1. 圖片質(zhì)量壓縮
  2. 圖片尺寸壓縮
  3. libjpeg.so壓縮
優(yōu)化細(xì)節(jié)
  1. ListView 使用 ViewHolder航厚,分段顷歌,分頁加載
  2. 壓縮Bitmap
8.響應(yīng)速度優(yōu)化
9.線程優(yōu)化
10.未優(yōu)化

編寫高效代碼有兩個(gè)基本規(guī)則: 1、不要做你不需要做的工作 2幔睬、如果可以避免眯漩,請(qǐng)不要分配內(nèi)存

  1. 避免創(chuàng)建不必要的對(duì)象
  2. 首選靜態(tài)
  3. 常量使用static final
  4. 使用增強(qiáng)for
  5. 避免使用浮點(diǎn)類型
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赦抖,更是在濱河造成了極大的恐慌舱卡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队萤,死亡現(xiàn)場(chǎng)離奇詭異轮锥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)要尔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門舍杜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盈电,你說我怎么就攤上這事蝴簇。” “怎么了匆帚?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵熬词,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我吸重,道長(zhǎng)互拾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任嚎幸,我火速辦了婚禮颜矿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫉晶。我一直安慰自己骑疆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布替废。 她就那樣靜靜地躺著箍铭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪椎镣。 梳的紋絲不亂的頭發(fā)上诈火,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音状答,去河邊找鬼冷守。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惊科,可吹牛的內(nèi)容都是我干的拍摇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼馆截,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼授翻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤堪唐,失蹤者是張志新(化名)和其女友劉穎巡语,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淮菠,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡男公,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了合陵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枢赔。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拥知,靈堂內(nèi)的尸體忽然破棺而出踏拜,到底是詐尸還是另有隱情,我是刑警寧澤低剔,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布速梗,位于F島的核電站,受9級(jí)特大地震影響襟齿,放射性物質(zhì)發(fā)生泄漏姻锁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一猜欺、第九天 我趴在偏房一處隱蔽的房頂上張望位隶。 院中可真熱鬧,春花似錦开皿、人聲如沸涧黄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笋妥。三九已至,卻和暖如春糠睡,著一層夾襖步出監(jiān)牢的瞬間挽鞠,已是汗流浹背疚颊。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工狈孔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人材义。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓均抽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親其掂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子油挥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android的性能優(yōu)化,主要是從以下幾個(gè)方面進(jìn)行優(yōu)化的: 穩(wěn)定(內(nèi)存溢出、崩潰) 流暢(卡頓) 耗損(耗電深寥、流量...
    Android_馮星閱讀 11,939評(píng)論 4 101
  • 什么是性能 快攘乒,穩(wěn),省惋鹅,小则酝,這四點(diǎn)很形象的代表了性能的四個(gè)方面,同時(shí)也讓我們知道我們App現(xiàn)在是否是款性能良好的A...
    Gary同學(xué)閱讀 575評(píng)論 0 0
  • 本文由玉剛說寫作平臺(tái)提供寫作贊助闰集,版權(quán)歸玉剛說微信公眾號(hào)所有原作者:Mr.s(豬_隊(duì)友)版權(quán)聲明:未經(jīng)玉剛說許可沽讹,...
    豬_隊(duì)友閱讀 3,197評(píng)論 1 22
  • 1、布局優(yōu)化 <1> 盡量減少不必要的嵌套 <2> 簡(jiǎn)單布局使用LinearLayout和FrameLayout ...
    墨池又雨閱讀 1,611評(píng)論 1 30
  • 前述 一個(gè)好的app除了有吸引人的功能, 美麗的交互之外,性能也至關(guān)重要,作為一個(gè)技術(shù)人員,在這里當(dāng)然只能講技術(shù)了...
    唐小鵬閱讀 2,451評(píng)論 0 23