首頁(yè) > 新聞 > 移動(dòng)端網(wǎng)站 > Android開(kāi)發(fā)性能優(yōu)化
Android開(kāi)發(fā)性能優(yōu)化
布局優(yōu)化在Android開(kāi)發(fā)時(shí),如果創(chuàng)建的布局層次結(jié)構(gòu)比較復(fù)雜,View樹(shù)嵌套的層次比較深,會(huì)使頁(yè)面展現(xiàn)的事件比較長(zhǎng),導(dǎo)致應(yīng)用運(yùn)行起來(lái)越來(lái)越慢,所以需要進(jìn)行布局優(yōu)化。
1.include標(biāo)簽共享布局:
將通用的布局抽取出來(lái),獨(dú)立成一個(gè)XML文件,在需要用到的頁(yè)面中使用include標(biāo)簽引入進(jìn)來(lái),減少代碼量,便于修改。
2.ViewStub標(biāo)簽實(shí)現(xiàn)延遲加載:
ViewStub是一種不可視并且大小為0的視圖,可以延遲到運(yùn)行時(shí)才填充布局資源。當(dāng)ViewStub設(shè)置為可見(jiàn)或者被inflate之后,會(huì)填充布局資源,ViewStub會(huì)被填充的視圖代替,和普通的視圖沒(méi)有區(qū)別。
ViewStub在需要顯示的時(shí)候才會(huì)進(jìn)行視圖的填充,實(shí)現(xiàn)延遲加載的目的。
3.merge標(biāo)簽減少布局層次:
當(dāng)一個(gè)獨(dú)立的布局文件最外層是FrameLayout且這個(gè)布局不需要設(shè)置背景等屬性時(shí)或者當(dāng)前布局是另外一個(gè)布局的子布局時(shí),可以使用merge來(lái)減少布局的層次。
4.盡量使用CompoundDrawable:
在LinearLayout布局中,如果存在相鄰的ImageView和TextView,可以使用compound drawable合二為一成為一個(gè)TextView,ImageView中的圖片變成TextVIew的drawableTop/drawableLeft/drawableRight/ddrawableBottom屬性,之間的間隔使用drawablePadding屬性來(lái)代替。5.使用
Lint: Lint也可以用來(lái)檢查應(yīng)用的布局是否存在可優(yōu)化的地方,為優(yōu)化布局設(shè)置的規(guī)則如下:
AndroidLintUseCompoundDrawables:盡量使用CompoundDrawable。 MergeRootFrame:使用merge標(biāo)簽減少布局層次。TooManyViews:單個(gè)布局中存在太多的View,默認(rèn)情況下,單個(gè)布局中View的個(gè)數(shù)最多只能是80個(gè),可以考慮使用CompoundDdrawables等來(lái)減少View的個(gè)數(shù)。TooDeepLayout:避免過(guò)深的布局嵌套,默認(rèn)情況下,單個(gè)布局中最多層級(jí)是10,可以考慮使用RelativeLayout來(lái)減少布局的層次。UselessParent:當(dāng)一個(gè)布局不是一個(gè)SrcollView或者根布局,
只有一個(gè)子View且沒(méi)有設(shè)置背景時(shí)可以將它移除掉,并將它的子View移動(dòng)到它的父容器中,得到更扁平的布局層次。
**NestedWeights:**android:layout_weight屬性會(huì)使得View控件被測(cè)量?jī)纱,?dāng)一個(gè)LinearLayout擁有非0dp值的android:layout_weight屬性,這時(shí)如果將它嵌套在兩一個(gè)擁有非0dp的android:layout_weight的LinearLayout,這時(shí)測(cè)量的次數(shù)將呈指數(shù)級(jí)別增加。
UselessLeaf:一個(gè)布局如果沒(méi)有子View也沒(méi)有設(shè)置背景,通?梢砸瞥,可以得到更扁平和高效的布局層次。
InefficientWeight:當(dāng)LinearLayout中只有一個(gè)子View定義了android:layout_weight屬性,更高性能的做法是使用0dp的android:layout_height或者android:layout_weidth來(lái)替換它,這個(gè)子View就不需要測(cè)量它自身對(duì)應(yīng)的大小。網(wǎng)絡(luò)優(yōu)化
網(wǎng)絡(luò)優(yōu)化可以節(jié)省網(wǎng)絡(luò)流量,節(jié)省電量,提高應(yīng)用的響應(yīng)。
1.避免DNS解析:
DNS是域名系統(tǒng),根據(jù)應(yīng)用請(qǐng)求所用的域名URL去網(wǎng)絡(luò)映射表中查找對(duì)應(yīng)的IP地址,這個(gè)過(guò)程可能會(huì)需要上百毫秒的時(shí)間,可能會(huì)存在DNS劫持的危險(xiǎn)。所有根據(jù)具體的業(yè)務(wù)需求,可以采用增加動(dòng)態(tài)更新能力的IP方式,或者在IP方式訪問(wèn)失敗時(shí)切換到域名訪問(wèn)方式。
2.合并網(wǎng)絡(luò)請(qǐng)求:
對(duì)于網(wǎng)絡(luò)請(qǐng)求應(yīng)該盡量減少請(qǐng)求的接口,能夠合并的網(wǎng)絡(luò)請(qǐng)求就盡量合并。
3.預(yù)先獲取數(shù)據(jù):
預(yù)先獲取數(shù)據(jù)能夠?qū)⒕W(wǎng)絡(luò)請(qǐng)求集中在一次,其他時(shí)間段手機(jī)就可以切換到空閑狀態(tài),避免經(jīng)常性的喚醒和空閑,起到節(jié)省電量的作用。
4.避免輪詢:
輪詢是指客戶端每隔一段時(shí)間就向服務(wù)端主動(dòng)發(fā)起的網(wǎng)絡(luò)請(qǐng)求,存在需要的數(shù)據(jù)就拉取,沒(méi)有就等待下一次輪詢。一般情況下能使用推送替換的盡量使用推送,避免使用Thread.sleep()函數(shù)循環(huán)等待,可以使用系統(tǒng)AlarmMananger實(shí)現(xiàn)定時(shí)輪詢。
5.優(yōu)化重連機(jī)制:
盡量避免網(wǎng)絡(luò)請(qǐng)求失敗時(shí),無(wú)限制循環(huán)重試連接,可以設(shè)定一個(gè)最大重連次數(shù),超過(guò)次數(shù)限制之后結(jié)束重連,等一段時(shí)間后再嘗試連接。
6.離線緩存:
對(duì)于圖片,文件等數(shù)據(jù),可以使用二級(jí)緩存策略,當(dāng)緩存中有對(duì)應(yīng)的圖片或者文件時(shí),可以直接從緩存中讀取,不需要網(wǎng)絡(luò)請(qǐng)求,避免網(wǎng)絡(luò)延遲,節(jié)省流量。
7.壓縮數(shù)據(jù)大。
對(duì)于客戶端來(lái)說(shuō),可以對(duì)發(fā)送給服務(wù)器的數(shù)據(jù)進(jìn)行g(shù)zip壓縮,同時(shí)可以選用更優(yōu)的數(shù)據(jù)傳輸格式來(lái)減少網(wǎng)絡(luò)上面?zhèn)鬏數(shù)臄?shù)據(jù)。
8.不同的網(wǎng)絡(luò)環(huán)境使用不同的超時(shí)策略:
可以通過(guò)監(jiān)聽(tīng) ConnectivityMananger.CONNECTIVITY_ACTION的變化來(lái)獲取最新的網(wǎng)絡(luò)類型,動(dòng)態(tài)調(diào)整網(wǎng)絡(luò)超時(shí)時(shí)間。
9.CDN的使用:
CDN,內(nèi)容發(fā)布網(wǎng)絡(luò),盡可能避免網(wǎng)絡(luò)上可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的環(huán)節(jié),實(shí)現(xiàn)更快,更穩(wěn)定的數(shù)據(jù)傳輸,其中CDN加速能夠緩解電信核心網(wǎng)絡(luò)延遲帶來(lái)的影響。
- 基于用戶創(chuàng)新
界面設(shè)計(jì)日新月異,夢(mèng)創(chuàng)義堅(jiān)持基于用戶需求的界面創(chuàng)新設(shè)計(jì)……
- 服務(wù)設(shè)計(jì)思維
互聯(lián)網(wǎng)的格局發(fā)生的改變,在我們進(jìn)行設(shè)計(jì)服務(wù)時(shí)更是考慮不同用戶、不同……
- 洞察用戶心理
洞察用戶有意識(shí)和無(wú)意識(shí)的行為以及心理特征通過(guò)構(gòu)造一系列的服務(wù)來(lái)促進(jìn)……
- 查看更多 >>
最新新聞Latest News
- 中小型企業(yè)網(wǎng)站建設(shè)完應(yīng)該如何營(yíng)銷
- 很多中小型企業(yè)往往糾結(jié)于以下10個(gè)問(wèn)題:一、我們起步比別人晚,我們的……
- 做企業(yè)網(wǎng)站到底做給誰(shuí)看?
- 設(shè)計(jì)經(jīng)常時(shí)不時(shí)的遇到一些企業(yè)客戶,常常搞不清楚誰(shuí)會(huì)真正看你的企業(yè)網(wǎng)……
- 傳統(tǒng)企業(yè)進(jìn)軍移動(dòng)互聯(lián)網(wǎng),從移動(dòng)云網(wǎng)站開(kāi)始
- 移動(dòng)互聯(lián)網(wǎng)是移動(dòng)通信和互聯(lián)網(wǎng)融合的產(chǎn)物,其發(fā)展的重要基礎(chǔ)便是智能手……
- 網(wǎng)站建設(shè)和運(yùn)營(yíng)五大細(xì)節(jié)決定用戶黏性
- 網(wǎng)站的成功離不開(kāi)搜索引擎優(yōu)化,更離不開(kāi)最基礎(chǔ)最根本的用戶群體,如何……
- 2015年值得關(guān)注的電子商務(wù)5大趨勢(shì)
- 線上線下銷售的界線正在變得越來(lái)越模糊。在2015年,這一趨勢(shì)仍將繼續(xù)!