一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS開發學習之監測程序的崩潰次數詳解

iOS開發學習之監測程序的崩潰次數詳解

2021-03-23 16:31斌Jonas IOS

iOS開發中遇到程序崩潰是很正常的事情,下面這篇文章主要給大家介紹了關于iOS如何監測程序崩潰次數的相關資料,文中通過詳細的示例代碼供大家參考學習,需要的朋友們下面跟著小編來一起學習學習吧。

前言

本文主要給大家介紹的是關于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。

代碼:

程序啟動

?
1
2
3
4
5
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 
 [self recordCrashCount];
 
}

程序退出

?
1
2
3
4
5
- (void)applicationWillTerminate:(UIApplication *)application {
 
 [[NSUserDefaults standardUserDefaults] setObject:@(NO) forKey:@"JJ_isCrash"];
 [[NSUserDefaults standardUserDefaults] synchronize];
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// 判斷和記錄崩潰的次數
 
- (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"];
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 彈出升級警告
 
- (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

使用方法:

在appdelegate.m中導入頭文件 #import "JJRecordCrash.h"

?
1
2
3
4
5
6
7
8
9
10
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 
 // 參數crashCount為崩潰多少次后執行block中的代碼
 [[JJRecordCrash shareInstance] recordCrashWithCrashCount:2 handle:^{
  // 多次崩潰后執行自己想執行的代碼,如:清除緩存 提示用戶更新
  NSLog(@"崩潰啦");
 }];
 
 return YES;
}

注意:調試時,在程序運行中直接使用xcode重新運行程序,因為不會走- (void)applicationWillTerminate:(UIApplication*)application方法,所以也相當于是崩潰,同樣會被記錄下來。

總結

以上就是這篇文章的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.jianshu.com/p/3e25d5bdc6c1

延伸 · 閱讀

精彩推薦
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
主站蜘蛛池模板: 日本三级成人中文字幕乱码 | 无人视频在线观看完整版高清 | 日韩久久精品 | 欧美日韩免费一区二区在线观看 | 亚洲欧美专区精品伊人久久 | 91私密保健女子养生spa | 韩国美女被的免费视频 | 亚洲欧美日韩在线观看看另类 | 2018久久精品热在线观看 | 欧美日韩国产精品综合 | 日本大尺度动漫在线观看缘之空 | 国产精品久久久久久久久免费 | 91热国内精品永久免费观看 | 99久久国产综合精品网成人影院 | 欧美另类杂交a | 色综合视频一区二区三区 | 美国复古性经典xxxxx | 四虎影视色费永久在线观看 | 范冰冰特黄xx大片 | 动漫美女被羞羞产奶 | 欧美另类xxx精品人妖 | 99久久精品国产片久人 | 久久WWW免费人成一看片 | 精品日韩一区二区三区 | 楚乔传第二部免费播放电视连续剧 | 第四色男人天堂 | 欧美香蕉视频 | 激情综合色啪啪小说 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 日老逼 | 嫩交18xxxx| 白丝校花被扒开双腿喷水小说 | 国产123区 | 日本另类z0zx高清 | 国产女主播在线播放一区二区 | 九九热在线视频观看这里只有精品 | 国产精品久久久久久岛国 | 美女被视频网站看免费入口 | 亚洲国产精品综合福利专区 | 奇米网7777| 精品免费久久久久久成人影院 |