前言
以下建議是結(jié)合自身經(jīng)驗(yàn)與網(wǎng)上多篇博客總結(jié)而成
-
控制好每一張圖片的大小味抖,因?yàn)樗鼈儗⒂绊慳pk的體積(和UI多交流)夭织,以下提供一些壓縮圖片的網(wǎng)站懈费。
眾所周知的熊貓壓縮
智圖是騰訊ISUX前端團(tuán)隊(duì)開發(fā)的一個(gè)專門用于圖片壓縮和圖片格式轉(zhuǎn)換的平臺(tái)豫柬,其功能包括針對(duì)png,jpeg,gif等各類格式圖片的壓縮锌钮,以及為上傳圖片自動(dòng)選擇最優(yōu)的圖片格式桥温。同時(shí),智圖平臺(tái)還會(huì)為用戶轉(zhuǎn)換一份webp格式的圖片
ImageAlpha通過應(yīng)用有損壓縮和轉(zhuǎn)換為更高效的PNG8 + alpha格式梁丘,大大減少了24位PNG文件的文件大星纸(包括Alpha透明度)
Imageoptim無損壓縮旺韭,并且支持客戶端(Mac客戶端)
SquooshGoogle 開源發(fā)布的一款專門用來壓縮圖片的在線服務(wù),除了壓縮尺寸掏觉,還能進(jìn)行簡(jiǎn)單的編輯区端,包括剪裁、減少調(diào)色板 如果頁(yè)面跳轉(zhuǎn)之間需要傳遞大量數(shù)據(jù)澳腹,那么并不建議使用Intent或者Bundle织盼,而是采用RxBus、EventBus酱塔、LiveDataBus沥邻。這里著重推薦LiveDataBus。但不能濫用
采用 PBF(按功能分包 Package By Feature)參考Blankj的Android開發(fā)規(guī)范
布局盡量避免嵌套羊娃,妥善使用ConstraintLayout唐全、Include、ViewStub蕊玷、Merge邮利,關(guān)注Space標(biāo)簽。這里推薦郭霖大神的(Android新特性介紹垃帅,ConstraintLayout完全解析)
選擇開源庫(kù)要慎重延届;不要只為某個(gè)小功能而導(dǎo)入一個(gè)體積龐大的庫(kù)
-
使用一些輔助工具來檢測(cè)項(xiàng)目的內(nèi)存溢出、性能檢測(cè)贸诚、異常報(bào)告系統(tǒng)等情況方庭。推薦一些輪子(工具眾多,自行選擇)
Bugly騰訊Bugly赦颇,為移動(dòng)開發(fā)者提供專業(yè)的異常上報(bào)和運(yùn)營(yíng)統(tǒng)計(jì)二鳄,幫助開發(fā)者快速發(fā)現(xiàn)并解決異常,同時(shí)掌握產(chǎn)品運(yùn)營(yíng)動(dòng)態(tài)媒怯,及時(shí)跟進(jìn)用戶反饋
BlockCanary是一個(gè)Android平臺(tái)的一個(gè)非侵入式的性能監(jiān)控組件
LeakCanary內(nèi)存泄漏檢測(cè)庫(kù) 使用依賴注入解耦6┧稀!扇苞!解耦F鄣睢!鳖敷!解耦2彼铡!定踱!Dagger2 on Android; 實(shí)際上:依賴注入不是必須的棍潘,有“條件”可用上(2021.07.22)
別往Application寫一些無用代碼,保持它的簡(jiǎn)潔,不然會(huì)拖慢應(yīng)用初始化和啟動(dòng)速度
盡量避免使用數(shù)據(jù)庫(kù)亦歉,除非真需要
使用DialogFragment而不是Dialog恤浪,官方解釋
不要過多使用枚舉,它占用的內(nèi)存空間要比整數(shù)大(辟謠:枚舉是可以使用的肴楷,詳情)
使用一些Android特有的數(shù)據(jù)結(jié)構(gòu)水由,比如SparseArray與Pair等,它們具有更好的性能
適當(dāng)使用軟引用和弱引用赛蔫,官方解釋
使用線程池而非創(chuàng)建大量的線程砂客;參考:Android 線程和線程池一篇就夠了
適當(dāng)?shù)奶砑幼⑨專。?適當(dāng)?shù)奶砑幼⑨專呵恢。鞠值。∵m當(dāng)?shù)奶砑幼⑨專渗钉。齿诉。?/strong>
別在View的onDraw方法里面創(chuàng)建對(duì)象或者做耗時(shí)任務(wù)
別把Context或者View此等對(duì)象設(shè)置成靜態(tài)
盡量采用靜態(tài)內(nèi)部類,可避免潛在由于內(nèi)部類導(dǎo)致的內(nèi)存泄漏
有一套良好的開發(fā)規(guī)范晌姚;參考:Android開發(fā)規(guī)范
代碼要有層次感,遵循單一職責(zé)歇竟,參考:設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則
2021.07.22更新
只有最合適的架構(gòu)挥唠;沒有最好的架構(gòu)。新技術(shù)始終會(huì)變成舊技術(shù)焕议,結(jié)合條件宝磨、環(huán)境等因素尋找最合適的架構(gòu)
學(xué)習(xí)Kotlin
ViewBinding是代替findViewById的一個(gè)好工具
遇到雙層列表的需求時(shí):使用Recycleview+自定義LinearLayout動(dòng)態(tài)添加View的方式來代替Recycleview嵌套R(shí)ecycleview也可以
基于第20點(diǎn),當(dāng)一個(gè)頁(yè)面太復(fù)雜時(shí)盅安,按功能拆分防止Activity/Fragment過于臃腫