測試描述
項目合成了思必馳的語音項目,測試在測試的過程中發(fā)覺app置于后臺一段時間后吓笙,再切換回前臺映屋,就會出現(xiàn)語音圖標點擊沒有反應,然后崩潰....
猜測
我開始猜測會不會是由于哪里出現(xiàn)了死循環(huán)導致點擊沒有反應最后崩潰袱讹,但是又想如果死循環(huán)的話應該整個頁面都是卡死的疲扎,不應該只有整個按鈕點擊了沒有反應。廓译。评肆。頭都想大了,還是想如何才會操作出這樣的場景
調試
反復重復測試的描述步棸非区,我發(fā)覺app至于后臺一段時間后返回瓜挽,界面會有卡頓,立馬通過memory
查看征绸,果不其然內存有問題:
于是直接運行查看memory
久橙,發(fā)覺會不停的增長,經過一系列代碼的分析終于找到內存增長的代碼管怠。
于是就想隨他漲淆衷,看看漲到多少會調用applicationDidReceiveMemoryWarning
,很不幸,嘗試了很多次渤弛,才調用這個地方祝拯,而且很不穩(wěn)定,有時候memory
已經很大了達到200M以上了還每調用
接下來她肯,又開始反復重復測試的步驟佳头,發(fā)覺當調用applicationDidReceiveMemoryWarning
的時候,切換回前臺, 那個按鈕點擊是必然會出現(xiàn)上訴情況晴氨,只是按鈕方法是響應的康嘉,UI并沒有變化,而且其他界面跳轉在memory
值大的情況下會卡頓
一次籽前,一次亭珍,又一次還是復現(xiàn)不出測試描述的結果,都快絕望了枝哄,就在下班前肄梨,出現(xiàn)了希望,*復現(xiàn)了膘格,復現(xiàn)了峭范,復現(xiàn)了,只見控制臺輸出如下:
malloc: Heap corruption detected, free list is damaged at 0x2830c7fa0
*** Incorrect guard value: 0
回想剛才的操作:
- 內存增長的先不管瘪贱, 運行之后至于后臺
- 一段時間后切換回前臺
-
applicationDidReceiveMemoryWarning
調用了纱控,并且出現(xiàn)了測試描述的情況辆毡,切面切換還沒達到卡頓,但是按鈕點擊UI已經不會變化了
再看崩潰的地方:
結合崩潰信息:
最終可以判斷:
是由于長時間至于后臺甜害,語音SDK處理close,導致按鈕點擊后UI沒有變化舶掖,另一邊由于內存持續(xù)增長,并觸發(fā)了applicationDidReceiveMemoryWarning
,導致系統(tǒng)釋放了部分 堆
,這個時候app 調接口再去訪問這個釋放的堆
空間尔店,立馬就崩潰了