码迷,mamicode.com
首页 > 移动开发 > 详细

iOS -- 后台相关

时间:2016-07-07 12:45:43      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

1.进入后台时释放内存

如果应用没有启用ARC机制,程序需要在应用进入后台时,将那些需要释放的资源的引用计数变为0,从而让系统回收这些资源。

当应用转入前台时,系统需要重新恢复这些资源。

如果应用启用了ARC机制,程序只要在应用进入后台时,将应用那些需要释放的资源的变量赋为nil即可。当应用转入前台时,

系统需要重新恢复这些资源。

2.请求更多的后台时间

当应用转入后台后,不要在主线程中执行超过5秒的任务,如果应用进入后台花费了太多时间(即applicationDidEnterBackground:方法的执行体花费太多时间),应用可能从内存中被删除.

   假如应用程序正在执行文件下载或文件传输等,当应用进入后台时,如果该任务还没有执行完成,应用转入后台该任务就会被暂停.千万不要强制在applicationDidEnterBackground:方法中直接完成该任务----因为这会导致应用进入后台花费太多时间,iOS系统可能直接从内存中删除该应用.正确的做法是: 以applicationDidEnterBackground:方法为平台,告诉系统进入后台还是更多的任务需要完成,从而向系统申请更多的后台时间.在这种方式下,当我们的应用处于后台时,即使用户正在使用其他应用,只要系统还是足够的内存,我们的应用就可以保存在内存中,iOS系统会保留应用运行一段时间。

//  应用转入前台时会向通知中心发送UIApplicationWillEnterForegroundNotification

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector:@selector(enterBack:) name:UIApplicationWillEnterForegroundNotification

object:[UIApplication sharedApplication]];

//  应用转入前台时会向通知中心发送UIApplicationDidEnterBackgroundNotification

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector:@selector(enterBack:) name:UIApplicationDidEnterBackgroundNotification

object:[UIApplication sharedApplication]];

- (void)applicationDidEnterBackground:(UIApplication *)application

{

        [[NSNotificationCenter defaultCenter]postNotificationName:@"stopCamera" object:nil];

        backgroundTask = [application beginBackgroundTaskWithExpirationHandler: ^{

        // 如果超时这个block将被调用

        YDLog(@"Time remaining: %f",[application backgroundTimeRemaining]);

        dispatch_async(dispatch_get_main_queue(), ^{

            if (backgroundTask != UIBackgroundTaskInvalid){

                 YDLog(@"Time remaining: %f",[application backgroundTimeRemaining]);

                // do whatever needs to be done

                [application endBackgroundTask:backgroundTask];

                backgroundTask = UIBackgroundTaskInvalid;

            }else{

                 YDLog(@"Time remaining: %f",[application backgroundTimeRemaining]);

            }

        });

    }];

 

     YDLog(@"%@",@"Reached the end of ApplicationDidEnterBackground - I‘m done!");

}

 

iOS -- 后台相关

标签:

原文地址:http://www.cnblogs.com/bomblet/p/5649608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!