1、nullpointer——就是使用一個對象的時候還沒有對其進行初始化導致該問題
一般在何種情況下容易出現呢?
(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位的系統要怎么處理要提前確認好