iOS程序閃退是一種比較常見的現象。閃退的情況很多,造成程序閃退的原因也很多。
================================啟動時閃退===================================
情況一: 秒退是發生在程序剛剛啟動的時候,在開發、蘋果審核階段都沒有被發現的最大可能性就是,這個問題只會發生在老版系統、老版機型上。
出現原因: 對於很多開發者,進行所有 iOS 版本,所有 iOS 機型覆蓋測試是有難度的,蘋果審核時也只是重點審核該應用在新機器、新版本下的運行情況,並不關注老系統。所以這也就是為什么會秒退的程序竟然
也能通過蘋果的審核。
解決辦法: 公司提供一套測試機,全面測試,提高用戶體驗,防止用戶流失。
***********************************************************************************
情況二:蘋果官方審查力度加大,導致代碼或者數據庫更新,或者項目中使用的第三方代碼已經不適合當前的蘋果官方的審查門檻。
出現原因:在新 iOS 上正常的應用,到了老版本 iOS 上秒退最常見原因是系統動態鏈接庫或Framework無法找到。這種情況通常是由於 App 引用了一個新版操作系統里的動態庫(或者某動態庫的新版本)或只有
新 iOS 支持的 Framework,而又沒有對老系統進行測試,於是當 App 運行在老系統上時便由於找不到而秒退。
解決辦法:開發人員發現這個問題后升級程序,或由用戶自行升級其操作系統。
*************************************************************************************
情況三:系統升級,用戶數據丟失導致
出現原因:程序在升級時,修改了本地存儲的數據結構,但是對用戶既存的舊數據沒有做好升級,結果導致初始化時因為無法正確讀取用戶數據而秒退。這類問題通常只需刪除程序后重新安裝一遍就能解決。但缺點是
用戶的既存數據會丟失——就算有備份可能也無濟於事,因為備份下來的舊數據還是無法被正確升級。
解決辦法:如果舊數據非常重要,那么就需要聯系開發人員要求其進行程序修正了。
*************************************************************************************
情況四:iOS版本升級導致問題,用到 App 里某個功能后閃退。
出現原因:是開發時用到了只有新版操作系統才支持的某個方法,而又沒有對該方法是否存在於老系統中做出判斷。例如程序啟動時用到了 Game Center,而沒有判斷用戶的
機器是否支持 Game Center,於是就秒退了。
解決辦法:做判斷
*************************************************************************************
情況五:內存占用過大,導致程序崩潰。
出現原因:諸如內存不足、BAD_ACCESS 這類問題通常不管在新舊 iOS 上都會存在,內存不足導致閃退,並不常見 ,因為這類問題造成的秒退通常都能在測試和審核階段被發現
以下是當個應用程序能夠使用的最大的內存空間。<來自StackOverFlow>
=====================================程序崩潰導致閃退===============================================
常見程序崩潰原因:
1.點擊某個模塊或者某個功能按鈕,進行頁面跳轉,或者獲取數據。---------------------->沒數據會崩潰,數據錯誤會崩潰。
2.點擊某個模塊或者某個功能按鈕,進行頁面跳轉,或者獲取數據。---------------------->業務邏輯處理不當會導致崩潰。
3.點擊某個模塊或者某個功能按鈕,直接導致崩潰:編輯代碼時無報錯,編譯時出錯。---------------------->代碼邏輯錯誤,或者存在閃退符號的代碼。
4.某對象無法解析每個方法,該方法沒有實現。
5.Bundle中加載不存在的資源。
=========================================程序崩潰的解決辦法==========================================
一:寫個方法打印崩潰日志
程序出現異常,要獲得出錯的原因,測試時可以通過打印崩潰信息來查看,上線后,要把用戶的崩潰日志文件上傳到服務器,以待處理。
1. 在程序啟動時加上一個異常捕獲監聽,用來處理程序崩潰時的回調動作。
NSSetUncaughtExceptionHandler
(&UncaughtExceptionHandler);
2. 實現自己的處理函數
void
UncaughtExceptionHandler(
NSException
*exception) {
NSArray
*arr = [exception callStackSymbols];
//得到當前調用棧信息
NSString
*reason = [exception reason];
//非常重要,就是崩潰的原因
NSString
*name = [exception name];
//異常類型
NSLog
(@
"exception type : %@ \n crash reason : %@ \n call stack info : %@"
, name, reason, arr);
}
二,程序中集成友盟。
友盟可以幫我們了解應用趨勢、渠道分析、留存分析、行為分析、用戶屬性、錯誤分析。其中的錯誤分析,可以幫我們找到問題的根源。
應用趨勢
清晰展現應用的新增用戶、活躍用戶、啟動次數、版本分布、行業指標等數據,方便您從整體掌控應用的運營情況及增長動態。
渠道分析
在哪里推廣最有效?從哪里獲取的用戶最有價值?友盟統計渠道分析功能可以實時查看各渠道的新增用戶、活躍用戶、次日留存率等用戶指標,通過數據對比評估不同渠道的用戶質量和活躍程度,從而衡量推廣效果。
留存分析
您可以掌握每日(周/月)的新增用戶在初次使用后一段時間內的留存率,留存率的高低一定程度上反映了產品和用戶質量的好壞。
行為分析
針對性地進行應用內的數據統計,了解用戶的產品使用細節及行為特征,幫助您尋找產品改進的突破點,評估產品優化的效果。
用戶屬性
用戶的基本屬性和行為特征,幫助您全面了解用戶。
錯誤分析
收集並歸類崩潰日志,提供錯誤管理及分析工具,幫助開發者更好的解決問題,從而提高應用的穩定性,改善應用質量。
------------------------------------------------------------------------------------------------------------------------------
購買阿里雲服務優惠鏈接: