iOS -- 后台相关

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!");

}

时间: 2024-08-02 23:47:14

iOS -- 后台相关的相关文章

iOS 后台运行实现 --备用

文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务. 判断是否支持多线程 UIDevice* device = [UIDevice c

iOS后台运行

我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间.还有三种类型的可以运行在后以,1.音乐2.location3.voip 文二 在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务. 判断是否支持多线程 UIDevice* device = [UIDevice curren

iOS 后台运行实现

iOS 后台运行的规则 应用的运行状态分为以下五种:Not running:应用还没有启动,或者应用正在运行但是途中被系统停止.Inactive:当前应用正在前台运行,但是并不接收事件(当前或许正在执行其它代码).一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态.唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电.有未读短信等)事件的时候.Active:当前应用正在前台运行,并且接收事件.这是应用正在前台运行时所处的正常状态Su

IOS开发之----详解在IOS后台执行

文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务. 判断是否支持多线程 UIDevice* device = [UIDevice c

ios后台机制

最近在做关于界面信息保存的模块,查阅相关的资料,对ios的后台机制有一个系统的了解,现在总结出来: IOS是"伪后台",iOS 中所谓的"后台驻留"并不是指"执行中的程序",而是"最近使用过的程序". 关闭--------这个程序以彻底关闭或尚未被开启 待用--------程序处于开启状态,但是并未收到任何指令(例如:程序开启但用户锁定了机器) 使用中----正常使用中的程序 后台--------程序不在开启状态但仍然在后台运

IOS后台运行机制 与 动作

当用户按下"Home"键或者系统启动另外一个应用时,前台foreground应用首先切换到Inactive状态,然后切换到Background状态.此转换将会导致先后调用应用代理的applicationWillResignActive:和applicationDidEnterBackground:方法. 在applicationDidEnterBackground:方法返回后,大部分应用在之后不久转入suspended状态.对于请求特定后台background任务的应用,比如播放音乐应

IOS 后台不断网处理

收藏 Snaiper 发表于 1年前 阅读 34 收藏 0 点赞 1 评论 0 破译"粽"子代码,拿最高悬赏!>>>   摘要: IOS 后台不断网处理 后台不断网处理  地图服务 // //  AppDelegate.m //  networkdemo // //  Created by siteview on 16/2/1. //  Copyright ? 2016年 数据结构. All rights reserved. // #import "AppD

ios UITableView 相关

tableView 实现的方法 无分组的cell #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.contacts.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRow

ios后台传输机制

http://www.appcoda.com/background-transfer-service-ios7/ http://www.raywenderlich.com/51127/nsurlsession-tutorial https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html ios后台传输机制