美文网首页
后台运行

后台运行

作者: 蚂蚁牙齿不黑 | 来源:发表于2016-12-30 14:43 被阅读25次

设备运行的五种状态

Not running 程序未启动 或者已经被杀死
Inactive 当前应用正在前台运行,但是并不接收事件 中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候
Active 当前应用正在前台运行,并且接收事件 即App在线
Suspended 应用处在后台,并且已停止执行代码 另一称呼为挂起状态,APP依然处在系统内存中,当系统发出低内存警告时,会杀死这个进程以保证其他的前台应用正常运行,我们要做的也就是防止app被挂起 从而能够进入后台模式
Background 应用处在后台,并且还在执行代码。一般的应用,会在此状态停留10分钟, 而iOS为了在某些情况下提供更好的体验,提供了一些选项,满足这些选项就可以在后台运行很长一段时间

Paste_Image.png

应用程序生命周期

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

      NSLog(@"\n ===> 程序启动 !");
    return YES;
}
//  当有电话进来或者锁屏,这时你的应用程会挂起  你可以重写这个方法,做挂起前的工作,比如关闭网络,保存数据
//  游戏应该用这个方法暂停游戏
- (void)applicationWillResignActive:(UIApplication *)application {
     NSLog(@"\n ===> 程序暂行 !");
}
/*
    用这个方法来释放共享资源,保存用户数据,销毁计时器,并储存足够的应用程序状态信息来恢复您的应用程序的当前状态
    如果您的应用程序支持后台执行,这种方法被称为替代applicationWillTerminate:当用户退出
 */
- (void)applicationDidEnterBackground:(UIApplication *)application {
     NSLog(@"\n ===> 程序进入后台 !");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
     NSLog(@"\n ===> 程序进入前台 !");
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
     NSLog(@"\n ===> 程序重新激活 !");
}
/*
 当用户按下按钮,或者关机,程序都会被终止。当一个程序将要正常终止时会调用 applicationWillTerminate 方法。但是如果长主按钮强制退出,则不会调用该方法。这个方法该执行剩下的清理工作,比如所有的连接都能正常关闭,并在程序退出前执行任何其他的必要的工作
 杀死程序
 */
- (void)applicationWillTerminate:(UIApplication *)application {
    NSLog(@"\n ===> 程序被kill!");
}

向系统借10分钟后台运行时间

1.借条

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
/**
 *  借条
 */
@property (nonatomic, unsafe_unretained)UIBackgroundTaskIdentifier backgroundTaskIdentifier;
@end

2.10分钟内需要做的事

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 if ([self isMultitaskingSupported]) {
   self.myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(print) userInfo:nil repeats:YES];
    NSLog(@"\n ===> 程序启动 !");
}
    return YES;
}

- (void)print
{
    NSLog(@"更新时间");
}

3.时间到了之后应该做的事


- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"\n ===> 程序进入后台 !");
    self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
         // 当应用程序留给后台的时间快要到结束时 这个Block块将被执行
        [self endBackgroundTask];
    }];
}

- (void) endBackgroundTask{
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    AppDelegate *weakSelf = self;
    dispatch_async(mainQueue, ^(void) {
        AppDelegate *strongSelf = weakSelf;
        if (strongSelf != nil)
        {
            [strongSelf.myTimer invalidate];// 停止定时器
            // 标记指定的后台任务完成
            [[UIApplication sharedApplication]endBackgroundTask:self.backgroundTaskIdentifier];
            // 销毁后台任务标识符
            strongSelf.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
        }
    });
    
}

相关文章

  • 后台运行

    app可以在后台保留10分钟,但线程停止。 例如做手机验证码倒计时,退到后台后倒计时停止一直到进入前台才再次倒计,...

  • 后台运行

    设备运行的五种状态 Not running 程序未启动 或者已经被杀死Inactive ...

  • Linux命令后台运行

    Linux后台运行命令有两种方式: cmd & : 后台运行,关掉终端会停止运行 nohup cmd & : 后台...

  • Linux后台运行程序与指定输出文件

    作者:Gakki 后台启动运行 linux 后台运行命令有两种方式:cmd &:后台运行,关掉终端会停止运行noh...

  • 2019-04-09 程序前后台切换、挂机后继续运行的方法

    后台运行程序: 1. 直接后台运行: [shell命令] & 2. 运行中转入后台: 先用ctrl+z挂起任务...

  • 终端后台命令

    command & : 后台运行,你关掉终端会停止运行 nohup command & : 后台运行,你关掉终端也...

  • iOS 短信验证码倒计时按钮

    级别: ★★☆☆☆标签:「iOS 验证码后台倒计时」「NSTimer后台运行」「iOS 定时器后台运行」作者: ...

  • Paper Collection - Background Ta

    1.IOS后台运行机制详解(一)2.IOS后台运行机制详解(二)3.IOS后台运行 之 后台播放音乐4.转载:IO...

  • 后台运行jar包

    1、后台运行jar包方法: nohup意为后台不挂断运行,与是否账号退出无关 2、后台运行,并将相关日志输出到sp...

  • DOCKER后台运行centos

    后台运行centos(-it添加交互,不带-it无法运行到后台): docker run -itd ce...

网友评论

      本文标题:后台运行

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