日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS进阶 - iOS如何监控崩溃

發布時間:2025/3/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS进阶 - iOS如何监控崩溃 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:https://blog.csdn.net/qxuewei/article/details/90760508

iOS進階 - iOS如何監控崩潰
幾種常見的崩潰
數組越界;給數組添加 nil;
多線程問題: 在子線程更新UI, 不同線程操作同一個數據。
主線程無響應:主線程超過系統規定時間無響應就會被 Watchdog 殺掉。
野指針:指針指向一個已刪除的內存區域會出現野指針崩潰。
KVO 問題
后臺任務超時
iOS 后臺保活的五種方式
1. Background Mode
App 審核時會提高對 App 的要求。通常情況下只有那些 地圖、音樂播放、VoIP類的App 才能通過審核

2. Background Fetch
喚醒時間不穩定,而且用戶可以在系統設置關閉這種方式,導致它的使用場景很少

3. Silent Push
推送的一種,會在后臺喚起 App 30秒。它的優先級很低,會調用 application:didReceiveRemoteNotifiacation:fetchCompletionHandler: 這個 Delegate, 和普通的 remote push notification 推送調用的 delegate 是一樣的

4. PushKit
后臺喚醒 App 后能夠保活 30 秒。主要用于提升 VoIP 應用的體驗

5. Background Task 方式
是使用最多的,App 退后臺后,默認都會使用這種方式

通常,程序在退到后臺以后,只有幾秒鐘的時間可以執行代碼,接下來就會被系統掛起。進程掛起后所有線程都會暫停,不管這個線程是文件讀寫還是內存讀寫都會被暫停,但是,數據讀寫過程無法暫停只能被中斷,中斷時數據讀寫異常而且容易損壞文件,所以系統會選擇主動殺掉 App 進程。

而 Background Task 方式就是系統提供了 beginBackgroundTaskWithExpirationHandler 方法來延長后臺執行時間,可以解決退后臺還需要一段時間處理一些任務的訴求。

Background Task 方式的使用方法,如下代碼所示:

- (void)applicationDidEnterBackground:(UIApplication *)application {
self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void) {
[self yourTask];
}];
}
1
2
3
4
5
這段代碼中,yourTask 任務最多執行 3 分鐘,3 分鐘內 yourTask 運行完成,你的App就會掛起。如果3分鐘內沒有執行完成的話,系統會強制殺掉進程,從而造成崩潰,這就是為什么 App 退后臺容易出現崩潰的原因。

如何避免后臺崩潰
App 退后臺后,如果執行時間過長就會導致被系統殺掉,那么我們就不能讓程序進入后臺后執行復雜的任務。如嚴格控制后臺數據的讀寫操作。在需要處理數據時先判斷其大小,如果數據過大可以考慮程序下次啟動或后臺喚醒時再進行處理。

分析并解決崩潰問題
采集到的崩潰日志主要包括:

進程信息:崩潰進城相關信息,比如崩潰報告唯一標示符、唯一鍵值、設備標識;
基本信息:崩潰發生的日期,iOS版本
異常信息:異常類型,異常編碼,異常的線程;
線程回溯:崩潰時的方法調用棧
通常情況下,我們分析崩潰日志時最先看的是異常信息,分析出問題的是哪個線程,在線程回溯
里找到那個線程;然后,分析方法調用棧,符號化后的方法調用棧可以完整地看到方法調用的過
程,從而知道問題發生在哪個方法的調用上。

方法調用棧頂,就是最后導致崩潰的方法的調用。完整的崩潰日志里,除了線程方法調用棧還有異常編碼,就在異常信息里。在 完整的異常編碼 里可以看到44種異常編碼。常見的三種如下:

0x8badf00d,表示 App 在一定時間內無響應而被 watchdog 殺掉的情況。
0xdeadfa11,表示 App 被用戶強制退出。
0xc00010ff,表示 App 因為運行造成設備溫度太高而被殺掉。

轉載于:https://www.cnblogs.com/IT-DavidYang/p/10977214.html

總結

以上是生活随笔為你收集整理的iOS进阶 - iOS如何监控崩溃的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。