需求:由于近期项目需求,用户行为不可控,某些用户在执行某些操作之后,强行杀死应用,导致部分统计数据没办法实时上传。所以需要在用户杀死应用的时候,将当前统计的数据上传到服务器(不持久化的数据)。
经过在网上寻找答案,和自己的验证。
在appdelegate中去实现两个api
-(void)applicationDidEnterBackground:(UIApplication *)application { NSLog(@"didenterbackgroud"); [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"auto kill app!"); }]; } -(void)applicationWillTerminate:(UIApplication *)application { NSLog(@"kill app !!!!"); }
两个方法配合使用。如果不实现
beginBackgroundTaskWithExpirationHandler
应用先退到后台,再杀应用,则不会调用
applicationWillTerminate
在应用界面的界面唤起直接杀死应用会调用
applicationWillTerminate
如上两个方法和一个block配合使用,则无论应用以什么方式被杀死都会调用
applicationWillTerminate
当应用被用户退到后台,一定时间之后会自动调用
beginBackgroundTaskWithExpirationHandler