一、 Crash
表現(xiàn):程序奔潰或閃退。
1、 對應(yīng)用的影響
??????????? 1、 程序無法繼續(xù)運行,數(shù)據(jù)丟失。
??????????? 2、 糟糕的用戶體驗。
2、產(chǎn)生原因
從Android框架可區(qū)分為Application ?Crash和Native Crash。
Application ?Crash由于java層線程因未捕獲異常而終止,由系統(tǒng)的void uncaughtException(Thread t,Throwable e)? 方法進行捕獲和處理,通常會給出界面彈窗提示“***已停止運行?!薄?/p>
Application ?Crash常見原因如下:(都是常見的java異常)
1、 NullPointerException:空指針異常。
2、 SQLException:操作數(shù)據(jù)庫異常類。
3、 ClassCastException:數(shù)據(jù)類型轉(zhuǎn)換異常。
4、NumberFormatException:字符串轉(zhuǎn)換為數(shù)字類型時拋出的異常。
5、ClassNotFoundException 異常的解釋是"指定的類不存在"。
6、ArithmeticException 這個異常的解釋是"數(shù)學(xué)運算異常",比如程序中出現(xiàn)了除以零這樣的運算就會出這樣的異常。
7、ArrayIndexOutOfBoundsException 數(shù)組越界異常
8、IllegalArgumentException 這個異常的解釋是"方法的參數(shù)錯誤"
9、IllegalAccessException 這個異常的解釋是"沒有類訪問權(quán)限"
10、ArrayStoreException 錯誤對象存儲到數(shù)組
Native Crash在C++層中出現(xiàn),上層的java程序無法獲取信息,僅從界面上看到閃退現(xiàn)象,可以從Monkey測試中進行關(guān)注。
具體原因如下:
? ? ?? 設(shè)備碎片化:由于設(shè)備極具多樣性,App在不同的設(shè)備上可能有表現(xiàn)不同。
帶寬限制:帶寬不佳的網(wǎng)絡(luò)對App所需的快速響應(yīng)時間可能不夠。
網(wǎng)絡(luò)的變化:不同網(wǎng)絡(luò)間的切換可能會影響App的穩(wěn)定性。
內(nèi)存管理:可用內(nèi)存過低,內(nèi)存泄漏、或使用非授權(quán)的內(nèi)存位置。
用戶過多:連接數(shù)量過多可能會導(dǎo)致App崩潰。
代碼錯誤:無效內(nèi)存地址、空指針、執(zhí)行非法的指令、訪問的資源不存在、對異常沒有處理等。
第三方服務(wù):廣告或彈出屏幕可能會導(dǎo)致App崩潰。
3、測試中如何關(guān)注
針對如上的Application ?Crash的原因分析,可得出對應(yīng)的測試關(guān)注方法:
a)??? 關(guān)注界面中的所有按鈕、控件的操作有效性,點擊是否能產(chǎn)生對應(yīng)的目標事件。
b)??? 通過自動化對應(yīng)用的部分運算操作進行長時間負載測試,可有效暴露此問題。
c)??? 通過重復(fù)的多次操作可有效暴露此問題。
d)??? 通過對輸入框進行異常輸入,例如日期輸入框,文本輸入框等。
4、如何解決
1、log文件夾下全局搜am_crash,此時會把log文件下下所有的包含am_crash的行顯示出來
2、crash問題很好看,基本上就代碼寫的有問題,針對出現(xiàn)的問題修改一下就好
二、 ANR
ANR:ApplicationNot Responding,程序未響應(yīng)。
1、對應(yīng)用影響是什么
??????? a) 等待時間過長,無提示,無法給出等待的反饋,用戶流失。
??????? b) 無法繼續(xù)完成操作,數(shù)據(jù)丟失。
2、產(chǎn)生原因
??????? a) 主線程 (“事件處理線程” / “UI線程”) 在5秒內(nèi)沒有響應(yīng)輸入事件
??????? b)? BroadcastReceiver 沒有在10秒內(nèi)完成返回
根本原因:
1. 主線程執(zhí)行了耗時操作 (大量的數(shù)據(jù)庫讀寫、耗時的網(wǎng)絡(luò)訪問、調(diào)用手機的某些功能超時)
2. 其他程序占用CPU導(dǎo)致本進程得不到CPU時間片 (其他進程的頻繁讀寫操作、其他線程持有鎖,導(dǎo)致主線程等待超時、其它線程終止或崩潰導(dǎo)致主線程一直等待)
3、測試中如何關(guān)注
a) 對部分上傳文件較大的頁面、保存文件信息較多的動作,比如電話本信息、帶有圖片的記事本保存等操作。
b)? 對某一時間的網(wǎng)絡(luò)進行極限使用,在被測應(yīng)用的一個場景無法使用網(wǎng)絡(luò)的情況下關(guān)注。
c) 重復(fù)多次的操作可能導(dǎo)致ANR事件,可使用Monkey工具進行測試。
d) 多任務(wù)、多線程應(yīng)用內(nèi)存占用極限時。
從測試層面對這兩類報錯事件進行了簡單介紹和分析,未講解具體應(yīng)用的報錯信息,但提出了一些測試中容易遇到報錯的路徑和方法,以便在測試中更多的發(fā)現(xiàn)問題。
4、如何解決
1、log文件夾下全局搜am_anr,此時會把log文件下下所有的包含am_anr的行顯示出來(也可以搜activitymanager: ANR)
2、一般同一個時間點的anr log會在不同的文件中出現(xiàn)兩次,一次是logxxx.txt中,一次是在crash_xxxxxx文件夾中的aplog_ANR_時間文件中
3、進入到crash_xxxxxx文件夾下,找到一個data_app_anr@xxx.txt文件
4、在data_app_anr@xxx.txt文件中找到"main" prio=5 tid=1 Nativ這一行,往下看會有一些異常log,這些log描述的就是問題原因
ANR如果是由于主線程阻塞,在data_app_anr@xxx.txt中的"main" prio=5 tid=1 中會顯示 block
------本文內(nèi)容來自以下博客-------
https://blog.csdn.net/pyn815093235/article/details/45895787