App開發(fā)建議技巧
開工準(zhǔn)備
在項(xiàng)目業(yè)務(wù)代碼開工之前,最好把這些問(wèn)題都解決掉,否則必將釀成大禍害。它們是:
- 組件路由
- 異步處理
- 組件化模塊工程
- 全局網(wǎng)絡(luò)攔截器
- 異常統(tǒng)一處理器
- 基礎(chǔ)視圖組件封裝
- 日志記錄工具
- 解決寫無(wú)數(shù)次一模一樣代碼的模板(如自定義MVP模板)
機(jī)型適配
特定的機(jī)型上出問(wèn)題時(shí),別著急。我們可以嘗試以下幾個(gè)辦法。
- 反編譯rom,看底層改動(dòng)(條件略高)
- 聯(lián)系該廠商的工程師(如果可以的話)
- 拷貝整個(gè)我們調(diào)用api的源碼進(jìn)行單獨(dú)依賴,而放棄系統(tǒng)內(nèi)的
- 逆向在該機(jī)型上正常的同類app,參考逆向后的代碼實(shí)現(xiàn)
- 參考各個(gè)版本不同的Android API變化,可以從源碼入手進(jìn)行對(duì)
- 利用反射獲取該特定機(jī)型上的某個(gè)我們想知道的方法,動(dòng)態(tài)調(diào)試
排查崩潰閃退日志:
1.如果app在調(diào)試的過(guò)程中出現(xiàn)閃退,此時(shí)在logcat下日志會(huì)被新起來(lái)的進(jìn)程沖刷掉。這時(shí)需要把過(guò)濾器選擇為No filter 把日志級(jí)別選為 error即可查看到上一次崩潰的日志。
2.有一種情況是手機(jī)并不在我們身邊,我們也無(wú)法使用調(diào)試工具。此時(shí)可以接入一些第三方的日志記錄工具。在開發(fā)狀態(tài)下不建議使用友盟 360之類sdk,因?yàn)楹苡锌赡芪覀兊腶pp根本無(wú)法連接到網(wǎng)絡(luò)就崩潰了。 可以選擇把日志存到本地文件中。再又使用手機(jī)的人發(fā)回來(lái)。一般這個(gè)人是測(cè)試。
3.如果app未接入任何日志保存工具,可以在data/anr/目錄下查看到所有的ANR異常信息。但需要su權(quán)限。否則無(wú)法訪問(wèn)到。
APP性能體驗(yàn)優(yōu)化
1.素材有必要使用壓縮后的。推薦熊貓PNG壓縮。
2.資源能用代碼畫盡量使用代碼去畫,而不要使用靜態(tài)資源。
3.在復(fù)雜的布局上,比如很多app的首頁(yè)需要加載不同類型的item。使用了RecyclerView多類型加載,刷新數(shù)據(jù)時(shí)一定要使用單獨(dú)對(duì)item刷新api。切勿使用notifyitemchanged()方法,這里要用兩個(gè)參數(shù)的notifyItemChanged(1,"gfg")方法。
4.數(shù)據(jù)懶加載,或排隊(duì)加載
5.混淆可以使包減小含:(xml 資源 class等)
6.如果玩得不是很6,盡量不要寫靜態(tài)引用,匿名內(nèi)部類這種會(huì)導(dǎo)致內(nèi)存泄漏的東西。如果很擔(dān)心自己失誤的寫了,一定要去分析它們,把他們揪出來(lái)。
7.Activity的層級(jí)不要太深。過(guò)深會(huì)在低內(nèi)存設(shè)備上被回收棧底的。
建議和技巧
1.發(fā)現(xiàn)某處代碼可以復(fù)用性的封裝一下或者改良一下會(huì)更好的時(shí)候一定要乘早,不要拖延。(爛泥巴只會(huì)越來(lái)越爛,后面改=永遠(yuǎn)沒可能)
2.debug編譯期間可以把用不到的abi過(guò)濾掉,會(huì)讓我們加速部署。
3.盡量保持較新的 support library依賴。因?yàn)檩^高的版本中修復(fù)了一些bug。
4.接入第三方包時(shí),最好與自身模塊保持獨(dú)立,做到隨時(shí)解耦,隨便復(fù)用。
接入第三方包時(shí),最好與自身模塊保持獨(dú)立,做到隨時(shí)解耦,隨便復(fù)用??赡芎芏嗳瞬焕斫猓号e個(gè)例子,如果需要將imgloader替換成fresco,若之前獨(dú)立出自己的方法,則會(huì)很簡(jiǎn)單,否則得一個(gè)個(gè)替換,賊麻煩。
5.多個(gè)native庫(kù)依賴時(shí),若發(fā)現(xiàn)某些abi上不支持,那么就需要保持最小的abi。否則會(huì)給某些機(jī)型優(yōu)先讀取它更合適的架構(gòu)。會(huì)造成災(zāi)難性的崩潰。如:ARM文件夾中含兩個(gè)so,ARMv8中只有一個(gè)。屆時(shí)手機(jī)優(yōu)先加載了ARMV8的情況下,將帶來(lái)找不到so庫(kù)的崩潰異常。
6.不要太隨性的引入第三方依賴庫(kù),如果只是用了很小一部分功能,建議剝出來(lái)自己封裝。
7.第三方的包含私有api為暴露時(shí),記得用反射去實(shí)現(xiàn)。當(dāng)然這一切需要我們能翻他們的sdk源碼讀。也許被混淆了。這時(shí)就可以使用動(dòng)態(tài)調(diào)試去跟蹤。
8.多數(shù)情況下官方的support包比第三方要好得多。只是我們不知道,或者不熟悉。
9.漸變圖、純色圖、帶一根線的圖用shape,不要靜態(tài)圖。會(huì)引發(fā)血案!
10.當(dāng)無(wú)法通過(guò)搜索解決問(wèn)題的時(shí)候,讀源碼是最快的解決思路。千萬(wàn)不要瞎猜和嘗試隨緣寫代碼來(lái)解決問(wèn)題。
11.封裝控件時(shí)注意對(duì)資源類型做校驗(yàn)
如:Image.setImageResource(img);
這里的img需要做強(qiáng)校驗(yàn),類型檢測(cè),防止別人用的時(shí)候不小心寫錯(cuò)了。因?yàn)槿绻覀儾恢鲃?dòng)拋出異常??縇ayoutInflater通過(guò)反射去解析xml時(shí)提示出了的錯(cuò)誤日志非常難看。一般還會(huì)伴隨一大堆調(diào)用棧和閃退出現(xiàn)。
12.冷啟動(dòng)優(yōu)化,不要在Application啟動(dòng)時(shí)里做過(guò)多的任務(wù)&第一個(gè)Activity里也是一樣。最好把初始化的白屏Window設(shè)上一張圖片過(guò)渡一下。
相關(guān)文章
計(jì)算機(jī)二級(jí)如何一次性通過(guò)?給NCRE焦躁心情降溫!
計(jì)算機(jī)二級(jí)到現(xiàn)階段應(yīng)該如何備考,該聽什么課?該針對(duì)哪些考點(diǎn)重點(diǎn)學(xué)習(xí),這些都要做到心里有數(shù),有計(jì)劃性。這篇文章為大家分享了計(jì)算機(jī)二級(jí)備考技巧,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
詳解Python OpenCV數(shù)字識(shí)別案例
信用卡識(shí)別的案例用到了圖像處理的一些基本操作,對(duì)剛上手CV的人來(lái)說(shuō)還是比較友好的。2021-05-05
微信小程序常用功能實(shí)例匯總包括上拉刷新,下拉加載,列表數(shù)據(jù)綁定,輪播,參數(shù)傳遞
這篇文章主要介紹了微信小程序常用功能實(shí)例匯總包括上拉刷新,下拉加載,列表數(shù)據(jù)綁定,輪播,參數(shù)傳遞,撥打電話,需要的朋友可以參考下2022-12-12
一文讀懂modbus slave和modbus poll使用說(shuō)明
modbus poll和modbus slave是一款實(shí)用的modbus開發(fā)和調(diào)試工具,可以非常方便的進(jìn)行modbus調(diào)試,是非常有用的Modbus主機(jī)/從機(jī)模擬程序,這篇文章給大家介紹modbus slave和modbus poll使用說(shuō)明,感興趣的朋友一起看看吧2021-04-04
app開發(fā)之原生開發(fā)、H5開發(fā)和混合開發(fā)的區(qū)別
這篇文章主要介紹了app開發(fā)之原生開發(fā)、H5開發(fā)和混合開發(fā)的區(qū)別,需要的朋友可以參考下2019-12-12

