Android的性能優(yōu)化

我的簡(jiǎn)書(shū):http://www.reibang.com/u/c91e642c4d90
我的CSDN:http://blog.csdn.net/wo_ha
我的GitHub:https://github.com/chuanqiLjp
我的個(gè)人博客:https://chuanqiljp.github.io/

版權(quán)聲明:商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系我獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)?jiān)谛涯课恢米⒚鞒鎏帯?/h2>

1、布局優(yōu)化

  1. 使用Lint(AS -> Analyze -> Inspect code) — 查看你的view 層級(jí)哪些地方可以?xún)?yōu)化之景;
  2. 刪除布局中無(wú)用的控件和層級(jí)裁良;
  3. 使用include標(biāo)簽重用布局文件壹堰;
  4. 盡量減少內(nèi)嵌的層級(jí)—>可考慮使用merge標(biāo)簽【刪減多余的層級(jí)】隙赁;
  5. 使用ViewStub標(biāo)簽按需加載所需的布局文件杖狼;

2澡屡、繪制優(yōu)化

  1. 在onDraw方法中不要?jiǎng)?chuàng)建新的局部變量猿挚;
  2. 在onDraw方法不做耗時(shí)操作和避免循環(huán);

3驶鹉、內(nèi)存泄露優(yōu)化(MAT分析和LeakCanary分析檢測(cè)內(nèi)存泄露)

  1. 單例模式導(dǎo)致的內(nèi)存泄露 —> 不要持有Activity或Fragment的引用改用Application的Context绩蜻;
  2. 屬性動(dòng)畫(huà)導(dǎo)致的內(nèi)存泄露:開(kāi)啟一個(gè)重復(fù)的動(dòng)畫(huà)沒(méi)有在onDestroy中停止播放;
  3. 非靜態(tài)內(nèi)部?jī)?nèi)的靜態(tài)實(shí)例室埋,非靜態(tài)內(nèi)部類(lèi)會(huì)維持一個(gè)到外部類(lèi)實(shí)例的引用办绝,如果非靜態(tài)內(nèi)部類(lèi)的實(shí)例是靜態(tài)的伊约,就會(huì)間接長(zhǎng)期維持著外部類(lèi)的引用,阻止被回收掉孕蝉,可以使用靜態(tài)內(nèi)部類(lèi)和WeakReference代替屡律。
  4. 資源對(duì)象未關(guān)閉,資源性對(duì)象如Cursor降淮、File超埋、Socket,應(yīng)該在使用后及時(shí)關(guān)閉佳鳖。未在finally中關(guān)閉霍殴;
  5. 注冊(cè)對(duì)象未反注冊(cè),未反注冊(cè)會(huì)導(dǎo)致觀察者列表里維持著對(duì)象的引用系吩,阻止垃圾回收来庭。在必要的地方及時(shí)反注冊(cè),如廣播淑玫,EventBus巾腕;
  6. Handler臨時(shí)性?xún)?nèi)存泄露,一般將Handler定義為靜態(tài)的絮蒿,推薦使用靜態(tài)內(nèi)部類(lèi)+弱引用 WeakReference 這種方式,但要注意每次使用前判空
  7. 避免Bitmap的浪費(fèi)叁鉴,臨時(shí)bitmap的主動(dòng)回收Bitmap土涝,bitmap.recycle();bitmap=null;
  8. 使用軟引用保存對(duì)象,當(dāng)內(nèi)存緊張時(shí)會(huì)釋放幌墓,使用弱引用保存對(duì)象但壮,當(dāng)發(fā)生GC操作時(shí)釋放對(duì)象
  9. 對(duì)象的復(fù)用:復(fù)用系統(tǒng)的資源,ListView的ConvertView復(fù)用常侣,避免在onDraw方法里執(zhí)行對(duì)象的創(chuàng)建
  10. 類(lèi)的靜態(tài)變量持有大數(shù)據(jù)對(duì)象蜡饵,不使用時(shí)及時(shí)置為null;
  11. Try catch某些大內(nèi)存的分配的操作胳施;

4溯祸、ListView優(yōu)化

  1. 復(fù)用convertView
  2. 緩存item條目的引用,減少findViewbyId—>ViewHolder
  3. 數(shù)據(jù)的 分頁(yè)/分批 加載:對(duì)大量的數(shù)據(jù)進(jìn)行分頁(yè)展示舞肆,對(duì)不同的滾動(dòng)狀態(tài)進(jìn)行分別處理焦辅,在快速滑動(dòng)狀態(tài)不加載數(shù)據(jù)
  4. 圖片的緩存,需要解決圖片錯(cuò)位問(wèn)題—>推薦使用成熟框架Glide或Picasso
  5. 根據(jù)列表的滑動(dòng)狀態(tài)來(lái)控制任務(wù)的執(zhí)行頻率(在快速滑動(dòng)時(shí)不要加載圖片)
  6. 可以開(kāi)啟硬件加速使ListView更加流暢(android:hardwareAccelerated="true")
  7. 將ListView的scrollingCache和animateCache這兩個(gè)屬性設(shè)置為false(默認(rèn)是true);
  8. 避免GC(可以從LOGCAT查看有無(wú)GC的LOG)椿胯;
  9. 盡可能減少List Item的Layout層次(如可以使用RelativeLayout替換LinearLayout筷登,或使用自定的View代替組合嵌套使用的Layout);

5哩盲、Bitmap優(yōu)化

  1. 避免Bitmap的浪費(fèi)前方,臨時(shí)bitmap的主動(dòng)回收Bitmap狈醉,bitmap.recycle();bitmap=null;
  2. 使用三級(jí)緩存,內(nèi)存-sd卡-網(wǎng)絡(luò),將大圖片用BitmapFactory壓縮采樣處理(使用inSampleSize參數(shù))再放到內(nèi)存中惠险;

6苗傅、數(shù)據(jù)庫(kù)的優(yōu)化

  1. 盡量利用原生的SQL語(yǔ)句,原生的SQL省去了拼接sql語(yǔ)句的步驟莺匠,要比SqliteDatabase提供的insert金吗、query、 update趣竣、delete等函數(shù)效率高摇庙。當(dāng)數(shù)據(jù)庫(kù)越大,差別也越大遥缕;
  2. 當(dāng)操作條數(shù)較多時(shí)卫袒,利用事務(wù)進(jìn)行批處理,這樣SQLite將把全部要執(zhí)行的SQL語(yǔ)句先緩存在內(nèi)存當(dāng)中单匣,然后等到COMMIT的時(shí)候一次性的寫(xiě)入數(shù)據(jù)庫(kù)夕凝,這樣數(shù)據(jù)庫(kù)文件只被打開(kāi)關(guān)閉了一次,效率自然大大的提高户秤;

7码秉、其他優(yōu)化

  1. 響應(yīng)速度優(yōu)化并避免ANR,分析ANR文件(/data/anr/traces.txt)鸡号;
  2. 盡量避免使用枚舉(枚舉占用空間大)转砖;
  3. 線(xiàn)程優(yōu)化:采用線(xiàn)程池避免線(xiàn)程的創(chuàng)建和銷(xiāo)毀所帶來(lái)的性能開(kāi)銷(xiāo);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鲸伴,一起剝皮案震驚了整個(gè)濱河市府蔗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汞窗,老刑警劉巖姓赤,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異仲吏,居然都是意外死亡不铆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)蜘矢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狂男,“玉大人,你說(shuō)我怎么就攤上這事品腹♂常” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵舞吭,是天一觀的道長(zhǎng)泡垃。 經(jīng)常有香客問(wèn)我析珊,道長(zhǎng),這世上最難降的妖魔是什么蔑穴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任忠寻,我火速辦了婚禮,結(jié)果婚禮上存和,老公的妹妹穿的比我還像新娘奕剃。我一直安慰自己,他們只是感情好捐腿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布纵朋。 她就那樣靜靜地躺著,像睡著了一般茄袖。 火紅的嫁衣襯著肌膚如雪操软。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天宪祥,我揣著相機(jī)與錄音聂薪,去河邊找鬼。 笑死蝗羊,一個(gè)胖子當(dāng)著我的面吹牛藏澳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耀找,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼笆载,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涯呻?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腻要,失蹤者是張志新(化名)和其女友劉穎复罐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雄家,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡效诅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了趟济。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乱投。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖顷编,靈堂內(nèi)的尸體忽然破棺而出戚炫,到底是詐尸還是另有隱情,我是刑警寧澤媳纬,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布双肤,位于F島的核電站施掏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茅糜。R本人自食惡果不足惜七芭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔑赘。 院中可真熱鬧狸驳,春花似錦、人聲如沸缩赛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)峦筒。三九已至究西,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間物喷,已是汗流浹背卤材。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峦失,地道東北人扇丛。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尉辑,于是被迫代替她去往敵國(guó)和親帆精。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

  • 前言:本章知識(shí)不是為具體的一個(gè)性能問(wèn)題提供詳細(xì)的解決方案,而是梳理和總結(jié)Android中性能優(yōu)化有關(guān)的問(wèn)題,讓我們...
    松哦哦閱讀 959評(píng)論 0 6
  • Android的性能優(yōu)化 寫(xiě)在前面: 零:性能指標(biāo) 布局復(fù)雜度:布局復(fù)雜會(huì)導(dǎo)致布局需要更長(zhǎng)的時(shí)間隧魄,從而導(dǎo)致進(jìn)入應(yīng)用...
    MeloDev閱讀 6,304評(píng)論 10 73
  • 所有知識(shí)點(diǎn)已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)卓练? 在 Jav...
    侯蛋蛋_閱讀 2,433評(píng)論 1 4
  • PPT 美化專(zhuān)題用來(lái)分享一些自己美化 PPT 的心得,在分享的過(guò)程中會(huì)穿插講一些設(shè)計(jì)理論和設(shè)計(jì)小技巧购啄,冀望各位做演...
    shenxiaoma閱讀 3,862評(píng)論 1 30
  • 面試襟企,是一場(chǎng)博弈。是一場(chǎng)自我包裝狮含,征服對(duì)手的戰(zhàn)爭(zhēng)顽悼。 在進(jìn)入戰(zhàn)場(chǎng)前,首先需要知己知彼几迄。知道面試的崗位是什么蔚龙,去了解對(duì)...
    零_bbc8閱讀 109評(píng)論 0 0