美文网首页人猿星球
关于如何在进入后台后继续运行

关于如何在进入后台后继续运行

作者: 这位网友 | 来源:发表于2016-07-13 14:59 被阅读502次

由于修改Bug,需要用到这个,暂时找的一些资料,未做整理。
Bug是要让NSTimer在进入后台之后继续计时

NSTimer后台运行并弹出提示

iOS程序进入后台后仍运行定时器NSTimer

ios之申请后台延时执行和做一个假后台的方法

对于以上方法,其实我看的有点晕。
而且由于同事说我们不能这样搞,所以就只好选用取巧,而又无伤大雅的方法。

思路就是记录即将失去活跃时的时间(进入后台),然后进入前台的时候再取一下当前时间,计算差值,更改需要显示的时间就行

具体方法就是:

在AppDelegate里边,进入后台和进入前台的时候发送通知

#pragma mark - 将要进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // 通知
    [[NSNotificationCenter defaultCenter] postNotificationName:@"applicationWillEnterForegroundNotif" object:nil userInfo:nil];
}

#pragma mark - 将要失去活跃
- (void)applicationWillResignActive:(UIApplication *)application
{
    // 通知
    [[NSNotificationCenter defaultCenter] postNotificationName:@"applicationWillResignActiveNotif" object:nil userInfo:nil];
}

然后在对应的页面中注册通知

//添加通知,记录进入后台与进入前台的时间差
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillEnterForegroud) name:@"applicationWillEnterForegroundNotif" object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:@"applicationWillResignActiveNotif" object:nil];

实现通知方法

@property (nonatomic, assign) NSInteger nowTime;//每次退出的时候保存的时间
@property (nonatomic, assign) NSInteger howLong;//每次进入后台到进入前台的时间

#pragma mark - NSTimer要在进如后台之后继续运行
-(void)appWillEnterForegroud{
    NSLog(@"进入前台");
    NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:0];
    NSInteger nowTime = [date timeIntervalSinceNow];
    if (_nowTime != 0) {
        _howLong = _nowTime - nowTime; //得到从进入后台到进入前台所经过的时间
//        NSLog(@"howLong = %li",(long)_howLong);
        [self oneCureHowLong:(int)_howLong];//拿到所经过时间之后,自行处理
    }
}

-(void)applicationWillResignActive{
    NSLog(@"失去活跃");
    NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:0];
    NSInteger nowTime = [date timeIntervalSinceNow];
    _nowTime = nowTime;
}

补充:

其实NSTimer加入到NSRunLoop后,在后台也是运行的,只是在前台的时候才会执行刷新UI的操作,而在后台是不会的,只会执行计时等操作。所以在后台时能看到传输数据这些操作继续运行,但是打开页面才会看到UI上的时间Label开始计时。

就像我们经常需要注意并且去做的一样,把刷新UI的操作都放在主线程中进行。

相关文章

  • 关于如何在进入后台后继续运行

    由于修改Bug,需要用到这个,暂时找的一些资料,未做整理。Bug是要让NSTimer在进入后台之后继续计时 NST...

  • GCD进入后台继续运行

    iOS GCD创建标准定时器,进入后台后任可继续定时

  • iOS后台模式借助位置更新实现

    需求:iOS系统下使我们的app在后台下(点击Home键进入后台)仍能继续运行任务. 阅读前提: 了解后台任务机制...

  • docker

    进入后台运行的容器

  • 后台延迟线程挂起

    问题:一般APP在切入后台5s后,线程挂起进入休眠状态。为了使APP进入后台后继续执行任务,则需要延迟后台休眠状态...

  • Linux 后台运行

    Linux 后台运行 命令后加 & 注意 如果希望关闭ssh后依然可以在后台运行需要

  • iOS程序后台问题

    程序运行时,按下Home键,程序进入后台,据实际测试程序代码还在执行,应该还会继续运行一小段时间(10 分钟)。当...

  • 生信小技巧:并行运行的秘密

    生信学习入门后,我们都掌握了如何在后台运行命令。一般我们可以通过for loop,将一系列的命令逐一运行。但是这样...

  • 转录组分析 1下载文件

    常识 1、关于命令的后台运行 & : 指在后台运行。nohup : 不挂断的运行。就是指,用nohup运行命令可以...

  • mongo db 在Linux下的简单操作

    运行mongodb,中端输入 开始等待连接。放到后台运行后,打开数据库连接:进入到bin目录 输入命令:mongo...

网友评论

  • PGOne爱吃饺子:其实NSTimer加入到NSRunLoop后,在后台也是运行的
    这句话是真的么,你可不要误导人啊
    这位网友:@PGOne爱吃饺子 忘记了,试试呗

本文标题:关于如何在进入后台后继续运行

本文链接:https://www.haomeiwen.com/subject/hansjttx.html