iOS4 请求更多后台时间

简介: iOS不是真正的多任务系统,在用户按下Home按钮后,所有应用程序都会进入后台状态,并且大部分都会迅速进入暂停状态,应用程序的所有工作内存都在RAM中,在暂停时它完全不执行。

iOS不是真正的多任务系统,在用户按下Home按钮后,所有应用程序都会进入后台状态,并且大部分都会迅速进入暂停状态,应用程序的所有工作内存都在RAM中,在暂停时它完全不执行。因此,切换回这样的应用程序非常快。但是如果系统需要更多的内存给当前处于活动状态的应用程序,就有可能终结暂停状态的应用程序,它们的内存也将被释放。

一方面,应用程序在进入后台状态时,需要释放一些资源,使自身的暂停快照更小,从而减少从RAM中清除的风险,另一方面,为了避免被终结而丢失用户的数据,需要在用户离开时保存他们的进度信息,这些工作,需要在5秒钟内完成,不然会被系统认定有异常被强制退出。可能通过接收应用程序发送的通知(UIApplicationDidEnterBackgroundNotification)来触发处理,如果在处理代码中加上下面这条语句则必然会导致异常退出:

[NSThread sleepForTimeInterval:10];
可以通过一种方法来请求更多后台时间来避免此问题。假设接收通知而触发的处理方法是applicationDidEnterBackground:

-(void)applicationDidEnterBackground{
	NSLog(@"%@",NSStringFromSelector(_cmd));

	//得到当前应用程序的UIApplication对象
	UIApplication *app = [UIApplication sharedApplication];

	//一个后台任务标识符
	UIBackgroundTaskIdentifier taskID;
	taskID = [app beginBackgroundTaskWithExpirationHandler:^{
		//如果系统觉得我们还是运行了太久,将执行这个程序块,并停止运行应用程序
		[app endBackgroundTask:taskID];
	}];
	//UIBackgroundTaskInvalid表示系统没有为我们提供额外的时候
	if (taskID == UIBackgroundTaskInvalid) {
		NSLog(@"Failed to start background task!");
		return;
	}
	NSLog(@"Starting background task with %f seconds remaining", app.backgroundTimeRemaining);
	[NSThread sleepForTimeInterval:10];
	NSLog(@"Finishing background task with %f seconds remaining",app.backgroundTimeRemaining);
	//告诉系统我们完成了
	[app endBackgroundTask:taskID];
}


目录
相关文章
|
6月前
|
Android开发 iOS开发
ios后台播放声音的三种实现方式
ios后台播放声音的三种实现方式
467 1
|
6月前
|
iOS开发
iOS中如何显示后台返回的带有html标签的富文本字符串
iOS中如何显示后台返回的带有html标签的富文本字符串
61 0
|
6月前
|
定位技术 开发工具 iOS开发
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
59 0
|
6月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
|
iOS开发
iOS开发 GET、POST请求方法:NSURLSession篇
iOS开发 GET、POST请求方法:NSURLSession篇
102 0
|
Web App开发 Android开发 iOS开发
iOS 后台程序
iOS 后台程序
172 0
|
Swift
iOS12 切换到后台请求丢失的问题
iOS12版本后,AFNetworking请求过程中,app返回后台,会出现以下错误,并且网络请求中断(只在真机中出现,模拟器不会复现)
219 0
|
API iOS开发
iOS多个线程发起相同请求,避免重复
有时候在调用多个模块时,会对同一个API进行多次请求,但因为内容都是一样的,所以最好就是加上锁,防止重复请求造成网络资源浪费
199 0