成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺議那些Android中的性能優(yōu)化

移動(dòng)開發(fā) Android
Android上如何做性能優(yōu)化的?性能優(yōu)化是一個(gè)大的范疇,如果有人問你在Android中如何做性能優(yōu)化的,也許都不知道從哪開始說起。

性能優(yōu)化是一個(gè)大的范疇,如果有人問你在Android中如何做性能優(yōu)化的,也許都不知道從哪開始說起。首先要明白的是,為什么我們的App需要優(yōu)化,最顯而易見的時(shí)刻:用戶say,什么狗屎,刷這么久都沒反應(yīng),取關(guān)卸載算了。

[[148281]]

這跟什么有關(guān),我們先蒼白的反駁下,尼瑪用戶設(shè)備老舊網(wǎng)又爛,關(guān)我屁事,根本不用優(yōu)化。可是,老板拍板了,施壓給CTO,然后CTO又來找你:Y的今天必須給我想辦法優(yōu)化了,不然不準(zhǔn)回家。

好吧,為什么從UI的表象上看,App又卡又慢而且還錯(cuò)亂。我們?cè)囍鴣砥饰鱿掳伞?/p>

題外話:把minSDK改到4.0+,去特么的low用戶,連手機(jī)都不愿意換,還能指望它能給你帶來多少營(yíng)收么,直接pass掉吧。4.0前的系統(tǒng)bug不少,不能為了彌補(bǔ)這些bug而降低了整體的高性能。

好了,讓我們先從UI說起:

首先要明白的是UI的繪制流程:measure-layout-draw,measure與layout都需要for loop所有的子控件,匯集起來才能完成繪制,布局。所以子控件越多,所消耗的時(shí)間越長(zhǎng)(inflate,layout_weight,relative,多層嵌套等),減少不必要的子控件或?qū)蛹?jí),是相當(dāng)有必要的。你可以通過merge,viewstub這些標(biāo)簽來減少層級(jí)嵌套。如果你的空間觀念沒那么好,可以用HierarchyViewer工具來檢查。

對(duì)于Listview或者GridView這種多item的組件來說,復(fù)用item可以減少inflate次數(shù),通過setTag,getTag的ViewHolder方式實(shí)現(xiàn)復(fù)用,這里要注意的是,holder中的控件最好reset后再賦值,避免圖片,文字錯(cuò)亂。

對(duì)于ViewPager第一次顯示時(shí)卡頓以及左右滑動(dòng)卡頓,有以下幾種優(yōu)化方式:

  • ViewPager同時(shí)緩存page數(shù)最好為最小值3,如果過多,那么第一次顯示時(shí),ViewPager所初始化的pager就會(huì)很多,這樣pager累積渲染耗時(shí)就會(huì)增多,看起來就卡。
  • 每個(gè)pager應(yīng)該只在顯示時(shí)才加載網(wǎng)絡(luò)或數(shù)據(jù)庫(kù)(UserVisibleHint=true),最好不要預(yù)加載數(shù)據(jù),以免造成浪費(fèi)

圖片顯示不出來或者加載時(shí)間太長(zhǎng),怎么辦?分兩部分,下載速度加載速度

對(duì)于下載,要控制好同時(shí)下載的最大任務(wù)數(shù)(平均速度慢),同時(shí)給InputStream再包一層緩沖流會(huì)更快(如BufferedInputStream)。

對(duì)于加載速度,我們要知道一點(diǎn),雖然下載的圖片可能只有幾百K,但是decode 成bitmap所占用的內(nèi)存可是成倍的,盡可能的減小圖片size是根本因素,讓服務(wù)端提供不同分辨率的圖片才是最好的解決方案,內(nèi)存總有耗盡的時(shí)刻,別老想著大分辨率會(huì)更清晰,實(shí)際就只有150*150的空間,非給弄張1000*1000的圖片是不恰當(dāng)?shù)摹A硗庹摷虞d速度:內(nèi)存>硬盤>網(wǎng)絡(luò),合理的使用內(nèi)存緩存也是關(guān)鍵。假如自己寫不好,沒關(guān)系,有那么多開源的圖片緩存框架,不用自己操心。

再說緩存

有很多種緩存方式,也不用Stay列舉了,我們要說的是搭配使用。

比方說,以前我們一直在用強(qiáng)引用,HashMap,后來我們發(fā)現(xiàn)占內(nèi)存,我們就用軟引用,弱引用來及時(shí)回收,再后來因?yàn)榛厥諜C(jī)制不可控,所以又有了 lrucache,disklrucache通過算法來平衡內(nèi)存與硬盤緩存。隨著android版本的推進(jìn)與演化,我們也應(yīng)該擁抱變化。如果你的App里還有軟引用,弱引用的地方,不妨再check下。

比方說網(wǎng)絡(luò)+數(shù)據(jù)庫(kù)。網(wǎng)絡(luò)我們一般都是去主動(dòng)獲取,而非被動(dòng)接受。那如果說數(shù)據(jù)是重復(fù)的或者未更改的呢?那我們?nèi)ト∫淮尉W(wǎng)絡(luò)數(shù)據(jù)有什么意義呢?我的解決方案是給每個(gè)activity或 fragment或每個(gè)組件設(shè)置一個(gè)最大請(qǐng)求間隔,比如一個(gè)listview,第一次請(qǐng)求數(shù)據(jù)時(shí),保存一份到數(shù)據(jù)庫(kù),并記下時(shí)間戳,當(dāng)下次重新初始化時(shí),判斷是否超過最大時(shí)間間隔(如5分鐘),如果沒有,只加載數(shù)據(jù)庫(kù)數(shù)據(jù),不需要再做網(wǎng)絡(luò)請(qǐng)求。當(dāng)然,還有一些隱式的http請(qǐng)求框架會(huì)緩存服務(wù)器數(shù)據(jù),在一定時(shí)間內(nèi)不再請(qǐng)求網(wǎng)絡(luò),或者當(dāng)服務(wù)器返回304時(shí)將之前緩存的數(shù)據(jù)直接返回。

反正也說到網(wǎng)絡(luò)了,那我們也來說說

現(xiàn)在有很多現(xiàn)成HTTP框架供我們使用,我們幾乎只用寫配置就可以搞定一個(gè)url請(qǐng)求,但是這里有很多需要服務(wù)端配合的,比如:json數(shù)據(jù)格式,WebP代替jpg,支持?jǐn)帱c(diǎn)續(xù)傳,多個(gè)請(qǐng)求合并成一個(gè),盡量不做重定向,服務(wù)器緩存以及負(fù)載均衡等。

對(duì)客戶端本身,除了上述的實(shí)現(xiàn),我們還需要合理的緩存,控制最大請(qǐng)求并發(fā)量,及時(shí)取消已失效的請(qǐng)求,過濾重復(fù)請(qǐng)求,timeout時(shí)間設(shè)置,請(qǐng)求優(yōu)先級(jí)設(shè)置等。

優(yōu)化可不是一個(gè)人的事,實(shí)現(xiàn)一個(gè)功能簡(jiǎn)單,但是想優(yōu)化重構(gòu),那是很不容易的事。需要多方面的預(yù)判與聯(lián)調(diào)。合理的假設(shè)與實(shí)踐是優(yōu)化最重要的手段。

說完這些具體的點(diǎn),我們?cè)賮碚f說一些常識(shí),或者稱之為代碼規(guī)范。

  • 你要知道for loop中不要聲明臨時(shí)變量,不到萬(wàn)不得已不要在里面寫try catch。
  • 明白垃圾回收機(jī)制,避免頻繁GC,內(nèi)存泄漏,OOM(有機(jī)會(huì)專門說)
  • 合理使用數(shù)據(jù)類型,比如StringBuilder代替String,(筆試題最常見的是str+="str"中有幾個(gè)對(duì)象) ,少用枚舉enum,少用父類聲明(List,Map)
  • 如果你有頻繁的new線程,那最好通過線程池去execute它們,減少線程創(chuàng)建開銷。
  • 你要知道單例的好處,并正確的使用它。
  • 多用常量,少用顯式的"action_key",并維護(hù)一個(gè)常量類,別重復(fù)聲明這些常量。
  • 如果可以,至少要弄懂設(shè)計(jì)模式中的策略模式,組合模式,裝飾模式,工廠模式,觀察者模式,這些能幫助你合理的解耦,即使需求頻繁變更,你也不用害怕牽一發(fā)而動(dòng)全身。需求變更不可怕,可怕的是沒有在寫代碼之前做合理的設(shè)計(jì)。

當(dāng)然還有很多很多,Stay所說的也只是一個(gè)大的輪廓,還是需要自己不斷的嘗試。會(huì)開發(fā)寫代碼跟會(huì)做產(chǎn)品的區(qū)別還是蠻大的,僅僅是態(tài)度就能刷死80%的碼農(nóng)了。當(dāng)你碰到一些需要優(yōu)化的地方,耐心的去分析,時(shí)間的累積會(huì)讓你成為真正的工程師。

另外優(yōu)化也沒有絕對(duì)的完美,每一次優(yōu)化都是基于當(dāng)前的環(huán)境來做的,要明白溝通是最好的優(yōu)化,不盲從,不隨便,三思而后行。

Android上如何做性能優(yōu)化的?大概寫三年代碼就能差不多知道了。

原文鏈接:http://www.cnblogs.com/stay/p/4784014.html

責(zé)任編輯:Ophira 來源: 博客園
相關(guān)推薦

2022-02-18 19:24:15

性能優(yōu)化代碼

2022-04-08 09:47:55

性能優(yōu)化開發(fā)

2022-04-13 10:03:59

性能優(yōu)化性能分析工具JVM

2014-03-27 11:34:09

C#優(yōu)化性能優(yōu)化

2010-04-29 16:46:59

Unix進(jìn)程

2010-04-09 15:08:17

Oracle 數(shù)據(jù)庫(kù)性

2017-04-27 10:20:13

Android內(nèi)存優(yōu)化圖片

2021-07-14 11:13:46

線程性能優(yōu)化阿里云

2021-07-29 14:20:34

網(wǎng)絡(luò)優(yōu)化移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)存儲(chǔ)

2011-07-15 14:46:18

PHP

2013-09-16 15:16:20

Android性能優(yōu)化

2011-02-16 09:57:41

2016-09-14 22:22:03

Android Vue性能優(yōu)化

2017-01-15 15:13:37

Android性能優(yōu)化優(yōu)化點(diǎn)

2020-05-20 13:24:28

MySQL優(yōu)化數(shù)據(jù)庫(kù)

2019-07-25 13:22:43

AndroidAPK文件優(yōu)化

2019-12-13 10:25:08

Android性能優(yōu)化啟動(dòng)優(yōu)化

2022-09-15 08:33:11

ChaosBladeJava場(chǎng)景

2010-05-12 14:14:41

MySQL性能優(yōu)化

2013-02-20 14:32:37

Android開發(fā)性能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美在线播放一区 | 亚洲天堂久久 | 一区二区三区四区免费在线观看 | 午夜av电影院| 99精品欧美一区二区三区综合在线 | 国产亚洲成av人在线观看导航 | 成人在线观看免费 | 嫩草国产 | 一区二区三区国产在线观看 | 国产精品美女一区二区三区 | 91xxx在线观看 | 欧美一区视频 | 久久久久久国产一区二区三区 | 一级免费黄色 | 亚洲视频在线观看 | 国产aa| 香蕉av免费 | 亚洲电影成人 | 国产特级毛片aaaaaa | 久久免费精彩视频 | 久久国产精品一区二区三区 | 免费看91 | 精品二三区 | 亚洲www啪成人一区二区麻豆 | 久久精品国产亚洲 | 成年人视频在线免费观看 | 视频精品一区 | 91资源在线 | 欧美福利视频 | 国产一区二区三区欧美 | 日韩一二三 | 黄色在线免费播放 | 97伦理 | av网站在线看 | 国产精品一区久久久久 | 日本视频免费观看 | 91在线观看 | 亚洲视频欧美视频 | 日韩三级在线 | 毛片免费视频 | 久久久涩 |