Android常見崩潰或閃退的問題描述及原因總結、及與性能相關的模塊——持續更新


1nullpointer——就是使用一個對象的時候還沒有對其進行初始化導致該問題

 

一般在何種情況下容易出現呢?

1)父窗口+子窗口同時出現的,父窗口因為某種原因消掉了,子窗口還在,操作子窗口找不到父窗口的pid,就會出現問題

2)加載過程中進行刷新或者其他點擊操作,可能某種資源還沒有初始化成功,就會出現該問題

3)異常情況下,比如斷網了,比如需要連接的設備沒有連接,則相應資源拿不到,此時點擊某些按鈕,也會出現該問題

 

 

2、OOM——在視頻\圖片的來回切換,比如橫豎屏的來回切換過程中比較容易出現,因為本身機子比較卡,內存小的話,加載比較大的圖片或視頻就容易這個問題

 

解決方案:

1)可以把加載的處理從上層挪到底層,比如從上層的Java層挪到底層的C++層,這樣就會比較省內存

2)針對不同的像素的手機做不同的適配(比如圖片像素也發生變化,否則高像素的圖片在低像素的手機上也沒有感知)

 

3、卡死——遇到過很多次,開發的解釋基本上都是前一個界面是一個window,后一個界面也是一個window,然后前一個界面切到后一個界面的時候,前面的window沒消掉,導致覆在了后一個界面上方,結果就出現了卡死的問題

 

4、IOS上很容易出現一類問題——也就是安卓上的nullpointer的問題,是nil object的問題,特別容易出現的就是將nil object insert into dict中時,必然崩潰,而且這種情況很多,因為很多數據結構都用字典

 

5、內存不足導致的崩潰——比如說內存沒有釋放,一長條列表下有N個資源需要展示,不斷下拉,上面的資源沒有釋放,所分配的內存越來越多,最后當然會崩潰

 

6、與性能相關的模塊——

 

容易出現內存問題的模塊——

1)圖片相關:連續發送圖片和查看圖片,重點是查看圖片(比如可循環來回查看圖片,之前的內存都不釋放,就可能出現問題);尤其是查看的單張圖片很大的話

2)視頻相關:不斷反復觀看返回繼續觀看,可能播放器的資源沒有釋放,導致內存不斷增長

 

CPU問題——

1)錯誤處理沒有加超時不斷重試,放在死循環里了——只要搞一個錯誤數據,程序就會反復請求,結果導致程序必崩

2)網絡請求:網絡請求很長時間內拿不到回應,需要設置重試和超時時間,並且在不同的網絡情況下要進行不同關注,目前主要是在WiFi和4G下

3)處理圖片解析、視頻解析等

(4)一直不停的在UI上進行更新處理,比如說網速條由很多個小點點組成,然后網速不停在變化,這些個小點點就需要不停的更新,程序需要不停的去面UI;以及下載的進度的展示,比如是通過一個圓圈或者一個橫條展示進度,如果每收到一個0.1%的回調,就在UI上更新,就會導致CPU不斷升高,手機很燙,最后崩潰

對於這個情況來說,如何處理呢?

網速條的小點變化,需要研究不同的IOS系統下的不同函數,出現過IOS9.3剛出現時,程序崩潰,因為系統API的兼容問題

下載進度展示:可以不用每收到一個回調就更新界面,可以等待每5%的時候,再更新UI

 

7、與兼容相關的問題——

不同的sdk的API,或者不同IOS系統的API,具體調用時可能會有差異,另外不同安卓手機,可能rom在廠家進行了一些處理之后,也會有差異,針對不同的情況都需要進行處理;

所以根據2-8原理,優先保證占比最多的系統和機型的兼容,之后再針對更多機型進行適配。

 

在安卓端,會存在很多低端機,比如幾年前的老手機,本身配置較低,有些處理在這些機器上就跑不起來;或者是:操作系統的版本很低

在IOS端,目前的4S、5、5C都可以算在低端機的范疇上,IOS7就是低端系統,這些系統上很容易因為本身配置低更容易出現性能問題,表現出來的就是同樣的操作,在這些機器上更容易閃退

5S以下的機器都是32位的系統,以上都是64位的系統,針對數據的處理也需要特別對待,比如后台服務器升級了,數據都升級成64位的了,那對於32位的系統要怎么處理要提前確認好


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM