-
Notifications
You must be signed in to change notification settings - Fork 149
Open
Description
思路很好,很轻量级。有个实现上可以优化下,可以降低50%以上误报机率,监听用户手动划掉APP这个事件,其中一些特定场景,是可以获取的。另外对API设计的建议。
优化:降低50%以上误报机率
用户主动kill掉APP分为两种情况:
- App在前台时用户手动划掉APP的时候
- APP在后台时划掉APP
第一种场景更为常见,可以通过监听UIApplicationWillTerminateNotification来捕获该动作,捕获后恢复计数。第二种情况,无法监听到。但也足以降低50%以上的误报机率。
对API设计的几点优化意见
1. 机制状态应当用枚举来做为API透出
该机制当前所处的状态,比如:NeedFix 、isFixing,建议用枚举来做为API透出。比如:
typedef NS_ENUM(NSInteger, BootingProtectionStatus) {
BootingProtectionStatusNormal, /**< APP 启动正常 */
BootingProtectionStatusNormalChecking, /**< 正在检测是否会在特定时间内是否会 Crash,注意:检测状态下“连续启动崩溃计数”个数小于或等于上限值 */
BootingProtectionStatusNeedFix, /**< APP 出现连续启动 Crash,需要采取修复措施 */
BootingProtectionStatusFixing, /**< APP 出现连续启动 Crash,正在修复中... */
};2. 关键数值应当做为初始化参数供用户设置
/*!
* 当前启动Crash的状态
*/
@property (nonatomic, assign, readonly) ABSBootingProtectionStatus bootingProtectionStatus;
/*!
* 达到需要执行上报操作的“连续启动崩溃计数”个数。
*/
@property (nonatomic, assign, readonly) NSUInteger continuousCrashOnLaunchNeedToReport;
/*!
* 达到需要执行修复操作的“连续启动崩溃计数”个数。
*/
@property (nonatomic, assign, readonly) NSUInteger continuousCrashOnLaunchNeedToFix;
/*!
* APP 启动后经过多少秒,可以将“连续启动崩溃计数”清零
*/
@property (nonatomic, assign, readonly) NSTimeInterval crashOnLaunchTimeIntervalThreshold;
3. 修复、上报逻辑应当支持用户异步操作
reportBlock 上报逻辑,
repairtBlock 修复逻辑
typedef void (^BoolCompletionHandler)(BOOL succeeded, NSError *error);
typedef void (^RepairBlock)(ABSBoolCompletionHandler completionHandler);用户执行 BoolCompletionHandler 后即可知道是否执行完毕,并且支持异步操作。
异步操作带来的问题,可以通过前面提到的枚举API来实时监测状态,来决定各种其他操作。
Hank-Zhong, ysghome, yueqianzhang, mistdon, amdanyu and 1 moreHank-Zhong
Metadata
Metadata
Assignees
Labels
No labels