iOS AppDelegate方法,监听进程在后台、被杀死事件

AppDelegate中一些常用方法:

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{

NSLog(@"启动程序,didFinishLaunchingWithOptions");

returnYES;

}

- (void)applicationWillResignActive:(UIApplication*)application

{

NSLog(@"将变为非活跃状态,applicationWillResignActive");

}

- (void)applicationDidEnterBackground:(UIApplication*)application

{

NSLog(@"进入后台,applicationDidEnterBackground");

}

- (void)applicationWillEnterForeground:(UIApplication*)application

{

NSLog(@"由后台进入前台,applicationWillEnterForeground");

}

- (void)applicationDidBecomeActive:(UIApplication*)application

{

NSLog(@"变为活跃状态,applicationDidBecomeActive");

}

- (void)applicationWillTerminate:(UIApplication*)application

{

NSLog(@"程序被杀死,applicationWillTerminate");

}

- (void)application:(UIApplication*)application handleEventsForBackgroundURLSession:(NSString*)identifier completionHandler:(void(^)(void))completionHandler

{

NSLog(@" 应用处于后台,所有下载任务完成调用,handleEventsForBackgroundURLSession");

}

当进入后台,想继续进行操作,如果没有注册后台任务,可实现如下代码:

先定义一个后台任务标识:UIBackgroundTaskIdentifier backgroundTaskIdentifier;
 
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // 若不实现该代码,进入后台,不会响应定时器事件
    backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(){
        // 程序在进入后台一定时间后,我测试是180秒左右,若还未结束后台任务,则会响应该回调,若已结束,则不会进入该回调
        NSLog(@"beginBackgroundTaskWithExpirationHandler");
    }];
    
    // 这里进行需要的操作,可在操作完成调用endBackgroundTask结束后台任务
    [NSTimer scheduledTimerWithTimeInterval:1.f target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
}
 
- (void)timerAction
{
    static int a = 0;
    if (a == 100) [self endBackgroundTask];
    NSLog(@"a : %d", a++);
}
 
- (void)endBackgroundTask
{
    [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskIdentifier];
    backgroundTaskIdentifier = UIBackgroundTaskInvalid;
}

监听进程被杀死时,会发现, 程序处于前台被杀死时会调用applicationWillTerminate:方法,程序处于后台时,并不会调用,需要实现如下代码:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // 实现如下代码,才能使程序处于后台时被杀死,调用applicationWillTerminate:方法
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(){}];
}
 
- (void)applicationWillTerminate:(UIApplication *)application
{
    NSLog(@"程序被杀死,applicationWillTerminate");
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS开发随笔

Unity项目嵌入现有iOS项目的方法

31570
来自专栏陈满iOS

iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,makeKeyAndVisible,keyWindow,windowLevel,UIWind

例如,很多人习惯在keyWindow上添加一个自定义浮层视图,但是,当自己或者其它第三方框架曾经调高过其它自定义UIWindow属性windowLevel,或者...

97410
来自专栏QQ音乐技术团队的专栏

React-Native 分包实践

对于很多在使用react-native开发应用的小伙伴们肯定都会遇到一个问题,功能越来越复杂,生成的jsbundle文件越来越大,无论是打包在app内发布还是走...

1.5K60
来自专栏青玉伏案

iOS开发之抽屉效果实现

  说道抽屉效果在iOS中比较有名的第三方类库就是PPRevealSideViewController。一说到第三方类库就自然而然的想到我们的CocoaPods...

28860
来自专栏Alice

iOS afnetworking最新版报错 没有AFHTTPRequestOperationManager类了

今天开了一个小项目   用的是pod   然后  安装好 Afnetworking之后   发现 AFHTTPRequestOperationManager  ...

64890
来自专栏Alice

ios 设置label的高度随着内容的变化而变化

<br> 好吧  步骤1:创建label _GeRenJianJie = [[UILabel alloc]init]; 步骤2:设置label _GeRenJi...

202100
来自专栏前端小叙

react如何监听路由url变化

使用这些生命周期钩子可以监听到路由相同,参数不同的变化,但是监听不到完全不相同的url的变化。即使路由不同,componentDidMount组件内容所更新的东...

2.2K10
来自专栏逸鹏说道

AutoFac在项目中的应用

技能大全:http://www.cnblogs.com/dunitian/p/4822808.html#skill 完整Demo:https://github....

36460
来自专栏『不羁阁』 | 行走少年郎专栏

iOS网络--HTTP请求HTTP请求

19180
来自专栏deepcc

弹出层高度不限垂直居中 兼容ie ff chrome

36490

扫码关注云+社区

领取腾讯云代金券