首页 > 移动平台 > 详细

iOS -- 后台相关

时间:2016-07-07 12:45:02      阅读:172      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!