Android app優(yōu)化

一、xml文件布局優(yōu)化
1.使用include 標(biāo)簽
抽取多個(gè)布局文件共用的代碼塊沸停,在需要的位置使用include標(biāo)簽添加進(jìn)去。
減少代碼量,提高代碼維護(hù)性
2.使用merage標(biāo)簽
降低UI布局的嵌套層次浸颓。
使用情景:
a.布局根結(jié)點(diǎn)是FrameLayout且不需要設(shè)置background或padding等屬性,可以用merge代替旺拉,因?yàn)锳ctivity內(nèi)容布局的parent view就是個(gè)FrameLayout(就setContentView)产上,所以可以用merge消除只剩一個(gè)
b.某布局作為子布局被其他布局include時(shí),使用merge當(dāng)作該布局的頂節(jié)點(diǎn)蛾狗,這樣在被引入時(shí)頂結(jié)點(diǎn)會自動被忽略晋涣,而將其子節(jié)點(diǎn)全部合并到主布局中。

3.使用ViewStub標(biāo)簽
Viewstub標(biāo)簽同include標(biāo)簽一樣可以用來引入一個(gè)外部布局沉桌,不同的是谢鹊,viewstub引入的布局默認(rèn)不會擴(kuò)張,即既不會占用顯示也不會占用位置留凭,從而在解析layout時(shí)節(jié)省cpu和內(nèi)存佃扼。 viewstub常用來引入那些默認(rèn)不會顯示,只在特殊情況下顯示的布局

注意:Viewstub控制的是一個(gè)布局文件蔼夜,而非某個(gè)View兼耀。
某些布局屬性要加在ViewStub而不是實(shí)際的布局上面,才會起作用,比如android:layout_margin*系列屬性瘤运,如果加在TextView上面窍霞,則不會起作用,需要放在它的ViewStub上面才會起作用拯坟。而ViewStub的屬性在inflate()后會都傳給相應(yīng)的布局但金。

使用方法:
通過(ViewStub)findViewById(id)找到ViewStub,通過stub.inflate()展開ViewStub郁季,然后得到子View傲绣。

    private View errorView;
 
    private void showError() {
        // not repeated infalte
        if (errorView != null) {
            errorView.setVisibility(View.VISIBLE);
            return;
        }
     
        ViewStub stub = (ViewStub)findViewById(R.id.error_layout);
        errorView = stub.inflate();
        Button networkSetting = (Button)errorView.findViewById(R.id.network_setting);
        Button refresh = (Button)errorView(R.id.network_refresh);
    }
 
    private void showContent() {
        if (errorView != null) {
            errorView.setVisibility(View.GONE);
        }
    }

/--------------------------------------------/
ViewStub使用,展開方式:
ViewStub stub = (ViewStub)findViewById(R.id.network_error_layout);
networkErrorView = stub.inflate();
或者
View viewStub = findViewById(R.id.network_error_layout);
viewStub.setVisibility(View.VISIBLE); // ViewStub被展開后的布局所替換
networkErrorView = findViewById(R.id.network_error_layout); // 獲取展開后的布局

雖然把View的初始可見View.GONE但是在Inflate布局的時(shí)候View仍然會被Inflate巩踏,也就是說仍然會創(chuàng)建對象秃诵,會被實(shí)例化,會被設(shè)置屬性塞琼。也就是說菠净,會耗費(fèi)內(nèi)存等資源。

ViewStub是一個(gè)輕量級的View彪杉,它一個(gè)看不見的毅往,不占布局位置,占用資源非常小的控件派近∨饰ǎ可以為ViewStub指定一個(gè)布局,在Inflate布局的時(shí)候渴丸,只有ViewStub會被初始化侯嘀,然后當(dāng)ViewStub被設(shè)置為可見的時(shí)候,或是調(diào)用了ViewStub.inflate()的時(shí)候谱轨,ViewStub所向的布局就會被Inflate和實(shí)例化戒幔,然后ViewStub的布局屬性都會傳給它所指向的布局。

4.盡量為所有分辨率創(chuàng)建資源土童,減少不必要的硬件縮放诗茎,這會降低UI的繪制速度

二、性能優(yōu)化
1.數(shù)據(jù)庫優(yōu)化
a.為數(shù)據(jù)建立索引---------------------------------------------------->>>>需要去查資料怎么建立和使用献汗,沒有使用過敢订,在數(shù)據(jù)庫沒有達(dá)到幾萬條數(shù)據(jù)時(shí),效果貌似不是很明顯罢吃,不過是個(gè)很好的習(xí)慣楚午,以后需要注意
b.使用事務(wù)
同一事務(wù)內(nèi)的所有修改要么都完成要么都不做,如果某個(gè)修改失敗刃麸,會自動回滾使得所有修改不生效醒叁。
Sqlite默認(rèn)會為每個(gè)插入司浪、更新操作創(chuàng)建一個(gè)事務(wù)泊业,并且在每次插入把沼、更新后立即提交。
顯示的創(chuàng)建事務(wù)->執(zhí)行100條語句->提交會使得這個(gè)創(chuàng)建事務(wù)和提交這個(gè)過程只做一次吁伺,通過這種一次性事務(wù)可以使得性能大幅提升饮睬。
2.代碼優(yōu)化
a.算法優(yōu)化,邏輯優(yōu)化
b.緩存
緩存主要包括對象緩存篮奄、IO緩存捆愁、網(wǎng)絡(luò)緩存、DB緩存窟却。
對象緩存能減少內(nèi)存的分配昼丑,IO緩存減少磁盤的讀寫次數(shù),網(wǎng)絡(luò)緩存減少網(wǎng)絡(luò)傳輸夸赫,DB緩存較少Database的訪問次數(shù)菩帝。

方式:
文件IO緩存
使用具有緩存策略的輸入流,BufferedInputStream替代InputStream茬腿,BufferedReader替代Reader呼奢,BufferedReader替代BufferedInputStream.對文件、網(wǎng)絡(luò)IO皆適用切平。

網(wǎng)絡(luò)緩存:okhttp設(shè)置握础。

數(shù)據(jù)存儲優(yōu)化
包括數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)的選擇悴品。
a. 數(shù)據(jù)類型選擇

字符串拼接用StringBuilder代替String禀综,在非并發(fā)情況下用StringBuilder代替StringBuffer。如果你對字符串的長度有大致了解苔严,如100字符左右菇存,可以直接new StringBuilder(128)指定初始大小,減少空間不夠時(shí)的再次分配邦蜜。

64位類型如long double的處理比32位如int慢

使用SoftReference依鸥、WeakReference相對正常的強(qiáng)應(yīng)用來說更有利于系統(tǒng)垃圾回收

final類型存儲在常量區(qū)中讀取效率更高

LocalBroadcastManager代替普通BroadcastReceiver,效率和安全性都更高

SparseArray悼沈、SparseBooleanArray贱迟、SparseIntArray、Pair絮供。
Sparse系列的數(shù)據(jù)結(jié)構(gòu)是為key為int情況的特殊處理衣吠,采用二分查找及簡單的數(shù)組存儲,加上不需要泛型轉(zhuǎn)換的開銷壤靶,相對Map來說性能更優(yōu)缚俏。

異步,利用多線程提高TPS

提前或延遲操作,錯(cuò)開時(shí)間段提高TPS

不在Activity忧换、Service恬惯、BroadcastReceiver的生命周期等對響應(yīng)時(shí)間敏感函數(shù)中執(zhí)行耗時(shí)操作,可適當(dāng)delay亚茬。
Java中延遲操作可使用ScheduledExecutorService酪耳,不推薦使用Timer.schedule;
Android中除了支持ScheduledExecutorService之外,還有一些delay操作刹缝,如
handler.postDelayed碗暗,handler.postAtTime,handler.sendMessageDelayed梢夯,View.postDelayed言疗,AlarmManager定時(shí)等。

對于第一次調(diào)用較耗時(shí)操作颂砸,可統(tǒng)一放到初始化中洲守,將耗時(shí)提前。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沾凄,一起剝皮案震驚了整個(gè)濱河市梗醇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撒蟀,老刑警劉巖叙谨,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異保屯,居然都是意外死亡手负,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門姑尺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竟终,“玉大人,你說我怎么就攤上這事切蟋⊥炒罚” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵柄粹,是天一觀的道長喘鸟。 經(jīng)常有香客問我,道長驻右,這世上最難降的妖魔是什么什黑? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮堪夭,結(jié)果婚禮上愕把,老公的妹妹穿的比我還像新娘拣凹。我一直安慰自己,他們只是感情好恨豁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布嚣镜。 她就那樣靜靜地躺著,像睡著了一般圣絮。 火紅的嫁衣襯著肌膚如雪祈惶。 梳的紋絲不亂的頭發(fā)上雕旨,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天扮匠,我揣著相機(jī)與錄音,去河邊找鬼凡涩。 笑死棒搜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的活箕。 我是一名探鬼主播力麸,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼育韩!你這毒婦竟也來了克蚂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筋讨,失蹤者是張志新(化名)和其女友劉穎埃叭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悉罕,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赤屋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壁袄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片类早。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗜逻,靈堂內(nèi)的尸體忽然破棺而出涩僻,到底是詐尸還是另有隱情,我是刑警寧澤栈顷,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布令哟,位于F島的核電站,受9級特大地震影響妨蛹,放射性物質(zhì)發(fā)生泄漏屏富。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一蛙卤、第九天 我趴在偏房一處隱蔽的房頂上張望狠半。 院中可真熱鬧噩死,春花似錦、人聲如沸神年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽已日。三九已至垛耳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間飘千,已是汗流浹背堂鲜。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留护奈,地道東北人缔莲。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像霉旗,于是被迫代替她去往敵國和親痴奏。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

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