
前言
現(xiàn)在的安卓碎片化其實(shí)挺嚴(yán)重,由于是開源的系統(tǒng),每個手機(jī)廠商都有自己的Rom。每個廠商的適配對于我這種苦逼的初級菜鳥安卓開發(fā)程序員是一大難題。但是今天講的并不是適配的話題,哈哈哈,那么我今天要說的,到底是什么呢?

前面講的可以當(dāng)做廢話,哈哈哈,今天我要講的,是當(dāng)遇到無法重現(xiàn)的Bug時,的其中一種定位方式。
問題來源
不知道大家有沒有遇到過,開發(fā)的App,在自己的手機(jī)上流暢到死,結(jié)果客戶一用就出現(xiàn)問題。我現(xiàn)在就是這樣。公司的App在我手機(jī)上面跑的時候,啟動速度飛快,但是到了部分客戶手上,卻變成了打開費(fèi)勁。要等待十幾秒才把主界面顯示出來。
這是什么用戶體驗(yàn)?。。。?/p>

解決思路
不是所有手機(jī)都有問題,那首先排除了代碼邏輯Bug。極大可能是第三方東西的問題。但是我們不能一味的盲目解決。首先我們得找到問題到底出現(xiàn)在哪里,不管能不能解決,首先得定位出現(xiàn)這些問題的位置。(其實(shí)我剛開始也是無頭蒼蠅一樣,一直在百度如何提高啟動速度。什么第三方初始化不要放在主線程啊等等)
后來實(shí)在沒有辦法,請教了有經(jīng)驗(yàn)之人,了解了一個定位問題的辦法?,F(xiàn)在就來講講。
說實(shí)話,當(dāng)你自己的手機(jī),測試的手機(jī)都沒有出現(xiàn)問題的時候,客戶再不斷說這個app不好用,這種感覺真不好受,感覺整個人都要自閉了。所以,定位方法就是:
定位方法
首先,你得想想為什么會出現(xiàn)這樣,出現(xiàn)這樣無非就幾種原因:
1.第三方框架初始化的時候可能卡住了(網(wǎng)絡(luò)或者其他原因阻塞主線程)
2.網(wǎng)絡(luò)不好
3.獲取本地?cái)?shù)據(jù)出現(xiàn)問題
........
那么,一打開就這樣,肯定是OnCreat方法里面有關(guān)系,我們了解里面的流程之后,就可以進(jìn)入本篇文章的重點(diǎn)了。
重點(diǎn)
你需要一個后臺服務(wù)器,如果你懂后臺的話,寫一個小的Demo,主要就是用于將App上傳的數(shù)據(jù),顯示出來。那假如不會后臺,怎么辦??自行百度了解實(shí)現(xiàn)這是一種方法,能擴(kuò)展你的知識面。不過這個很費(fèi)時間哦。那怎么辦嘞?這個好辦,找你們公司的后臺幫忙一下就好了,實(shí)現(xiàn)這個很簡單。
那么后臺服務(wù)器Demo準(zhǔn)備好了,我們就開始在App上動刀子了。我們在每一個初始化第三方框架的結(jié)束的時候,就上傳當(dāng)前的手機(jī)型號、網(wǎng)絡(luò)狀態(tài)、內(nèi)存剩余量、初始化的第三方信息以及最重要的完成時間(毫秒級)。什么?這些都不知道如何獲取?這個我下一篇文章將詳細(xì)講解。這樣子,當(dāng)你Build一個測試App給用戶打開的時候,通過時間的比對,你就會知道,到底哪一步是造成進(jìn)入慢的罪魁禍?zhǔn)住6嗾f無益,舉個栗子:
/**
* 初始化極光推送SDK
*/
JPushInterface.setDebugMode(true);
JPushInterface.init(context);
//調(diào)用網(wǎng)絡(luò)訪問封裝類,上傳 Log 日志數(shù)據(jù)
new MyLibraryLogAPI().uploadLog("initApp", "App", LogTestUtils.produceLogMsg(this, "極光推送初始化"), 1);
LogTestUtils.produceLogMsg(this, "極光推送初始化")這個是獲取到我需要的的值,具體如下:
public static String produceLogMsg(Context context,String problemSite){
String logMsg=null;
logMsg="調(diào)試哪個步驟造成卡頓:" +
" 當(dāng)前手機(jī):" + getDeviceBrand()+" "+getSystemModel()+
" 時間:"+getLogTimeString() +
" 本機(jī)總內(nèi)存大?。? +getTotalMemory(context)+
" 當(dāng)前可用內(nèi)存大?。? +getAvailMemory(context)+
" 網(wǎng)絡(luò)狀態(tài):" + getAPNType(context)+
" 停留的定位:"+problemSite;
return logMsg;
}
到這里,App的操作就講完了,是不是挺簡單?主要就是后臺這塊有點(diǎn)難搞。哈哈哈
當(dāng)我們編譯app,再手機(jī)上測試的時候,后臺服務(wù)器就會打印我們上傳的數(shù)據(jù)了,附上后臺結(jié)果圖。

這樣子,初始化一目了然,我們只需要打包給客戶,叫他打開App,咱們就能定位到問題到底出現(xiàn)在哪里啦?。?br> 細(xì)心的朋友可能會發(fā)現(xiàn),我給出的結(jié)果圖貌似挺正常的,每一個初始化都在毫秒級就完成了。沒錯,確實(shí)沒有任何問題,因?yàn)槲椰F(xiàn)在還沒有定位出來哪里出現(xiàn)了問題,哈哈哈哈,至少現(xiàn)在能知道,客戶出現(xiàn)的問題,至少不是第三方初始化了,下一步將在網(wǎng)絡(luò)和本地?cái)?shù)據(jù)獲取中定位。
總結(jié)
這是一個問題定位的方法,肯定還有其他更好的方法,因?yàn)槲覉?jiān)信一句話:辦法總會比困難多,一切皆有可能!
碼字不易,望點(diǎn)贊關(guān)注。也是自己的第一篇正式的文章,如有錯誤,望批評改正。????
最后,一張神圖壓底。
