您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關iOS如何監測程序的崩潰次數的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在寫代碼之前,我們先弄明白一個app運行的流程。
程序運行啟動時依次調用
1.啟動頁先運行
2. - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
3. - (void)applicationDidBecomeActive:(UIApplication*)application
程序退到后臺依次調用
1. - (void)applicationWillResignActive:(UIApplication*)application
2. - (void)applicationDidEnterBackground:(UIApplication*)application
程序從后臺回到前臺依次調用
1. - (void)applicationWillEnterForeground:(UIApplication*)application
2. - (void)applicationDidBecomeActive:(UIApplication*)application
程序被殺掉會依次調用
1. - (void)applicationWillResignActive:(UIApplication*)application
2. - (void)applicationDidEnterBackground:(UIApplication*)application
3. - (void)applicationWillTerminate:(UIApplication*)application
程序崩潰閃退則不會調用任何方法
根據程序被殺掉和崩潰之間的區別可以寫一個方法來檢測和記錄程序崩潰次數。
實現思路
在程序啟動時把存儲在沙盒中的崩潰標識isCrash置為YES,程序將要退出時把isCrash改為NO。
代碼:
程序啟動
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self recordCrashCount]; }
程序退出
- (void)applicationWillTerminate:(UIApplication *)application { [[NSUserDefaults standardUserDefaults] setObject:@(NO) forKey:@"JJ_isCrash"]; [[NSUserDefaults standardUserDefaults] synchronize]; }
// 判斷和記錄崩潰的次數 - (void)recordCrashCount{ BOOL isCrash = [[[NSUserDefaults standardUserDefaults] valueForKey:@"JJ_isCrash"] boolValue]; [[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"JJ_isCrash"]; if (isCrash == YES) { //獲取到本地存儲的崩潰次數 NSNumber *crashNum = [[NSUserDefaults standardUserDefaults] valueForKey:@"JJ_crashCount"]; NSInteger count =0; if (crashNum != nil) { count = [crashNum integerValue]; } count++; //判斷崩潰次數達到多少次時執行操作 if (count >= crashCount) { NSLog(@"多次崩潰"); //將本地文件崩潰次數重新置為0 [[NSUserDefaults standardUserDefaults] setObject:@0 forKey:@"JJ_crashCount"]; // 5秒后執行彈窗警告操作 [self performSelector:@selector(showAlertAction)withObject:nil afterDelay:5]; return; } //崩潰次數未達到3次則向本地存儲崩潰次數 crashNum = [NSNumber numberWithInteger:count]; [[NSUserDefaults standardUserDefaults] setObject:crashNum forKey:@"JJ_crashCount"]; } }
// 彈出升級警告 - (void)showAlertAction{ UIAlertController*alert = [UIAlertControlleralertControllerWithTitle:@"警告"message:@"檢測到軟件多次異常退出,建議您盡快更新到最新版本!" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction*sure = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefaulthandler:nil]; [alert addAction:sure]; [self.window.rootViewController presentViewController:alert animated:YES completion:nil]; }
為了方便大家直接使用,我已經將實現代碼封裝為一個小框架,只需使用一句代碼即可調用。
github下載地址: https://github.com/jiangbin1993/JJRecordCrash
本地下載地址:http://xiazai.jb51.net/201707/yuanma/JJRecordCrash(jb51.net).rar
使用方法:
在appdelegate.m中導入頭文件 #import "JJRecordCrash.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 參數crashCount為崩潰多少次后執行block中的代碼 [[JJRecordCrash shareInstance] recordCrashWithCrashCount:2 handle:^{ // 多次崩潰后執行自己想執行的代碼,如:清除緩存 提示用戶更新 NSLog(@"崩潰啦"); }]; return YES; }
注意:調試時,在程序運行中直接使用xcode重新運行程序,因為不會走- (void)applicationWillTerminate:(UIApplication*)application
方法,所以也相當于是崩潰,同樣會被記錄下來。
感謝各位的閱讀!關于“iOS如何監測程序的崩潰次數”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。