关于App进入background状态
2017-04-01 16:40
169 查看
鉴于苹果对IOS系统的封闭政策,让我们的APP在进入background状态能做的事情非常有限。一般应用在进入background状态后只有几秒的时间留给用户进行一些清理和数据保存的时间。App立即就被系统挂起(当然可以理解是用户也不会让你的APP在背后背着我干一些不知道的事情耗费电量和手机流量,手机电量已经成为智能手机的软肋,一般现在是一天一充(android手机),苹果手机当然好一些,毕竟别个的限制不是毫无理由的和效果。)因此一般的应用在
- (void)applicationDidEnterBackground:(UIApplication *)application方法里面进行一些资源的释放和简单数据的保存(如状态,用户数据等),必须是轻量级的毕竟时间有限,不能做过多的任务。当然苹果也不是没有考虑到一些特殊情况的存在。如果你的应用硬是要在后台进行一些重量的任务要做,ok,可以但是时间是有限的,不是无限的哦,在IOS7之前这个时间是10分钟左右,在IOS7后这个时间缩短到3分钟。并且你必须要告知系统你进入后台还有一些长任务要做。这当然就是要进些一些设置。勾选你需要进行的一些操作。
还没完,你必须要在你的任务完成后,告诉系统你已经做完工作了,ok,系统可以把你的应用挂起了,苹果设计的还是很科学的。即使你完成了后,不告诉系统你做完了,系统也会在指定的时间过后挂起你的应用,ok,不会通知你的。当然我们可以使用application.backgroundTimeRemaining来知道我们还有多少时间可以用。block块会在app允许指定的时间过后强制关闭你的任务。
__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
// Clean up any unfinished task business by marking where you
// stopped or ending the task outright.
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// Do the work associated with the task, preferably in chunks.
//UIBackgroundTaskInvalid
NSLog(@"Starting background task with %0.1f seconds remaining", application.backgroundTimeRemaining);
[NSThread sleepForTimeInterval:600];
NSLog(@"Finishing background task with %0.1f seconds remaining",application.backgroundTimeRemaining);
//告诉系统我们完成了
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
对于音乐应用来说。对不起,这个就需要在后台运行,用户也认可,所以这类应用你可以在后台一直运行。你也默认了耗电就耗电了吧。
对与location update的情况,我们的应用在进入后台后也应该是会挂起的,只不过你向系统注册了类似的通知,让操作系统帮你monitor用户的位置update,当用户的位置change,ok,操作系统会唤起你的应用,让你有一定的时间来处理这个位置变化的事件。等你处理完毕后系统再次挂起你的应用。这样设计也是合理的。一切在我的掌握下才是最安全和放心的。
其他的情形应该也是类似的情况,系统不会让你的应用一直在后台运行,这会违背苹果的设计初衷。最后膜拜一下苹果。
具体可以参考每种情况的实例:
http://www.raywenderlich.com/29948/backgrounding-for-ios
- (void)applicationDidEnterBackground:(UIApplication *)application方法里面进行一些资源的释放和简单数据的保存(如状态,用户数据等),必须是轻量级的毕竟时间有限,不能做过多的任务。当然苹果也不是没有考虑到一些特殊情况的存在。如果你的应用硬是要在后台进行一些重量的任务要做,ok,可以但是时间是有限的,不是无限的哦,在IOS7之前这个时间是10分钟左右,在IOS7后这个时间缩短到3分钟。并且你必须要告知系统你进入后台还有一些长任务要做。这当然就是要进些一些设置。勾选你需要进行的一些操作。
还没完,你必须要在你的任务完成后,告诉系统你已经做完工作了,ok,系统可以把你的应用挂起了,苹果设计的还是很科学的。即使你完成了后,不告诉系统你做完了,系统也会在指定的时间过后挂起你的应用,ok,不会通知你的。当然我们可以使用application.backgroundTimeRemaining来知道我们还有多少时间可以用。block块会在app允许指定的时间过后强制关闭你的任务。
__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
// Clean up any unfinished task business by marking where you
// stopped or ending the task outright.
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// Do the work associated with the task, preferably in chunks.
//UIBackgroundTaskInvalid
NSLog(@"Starting background task with %0.1f seconds remaining", application.backgroundTimeRemaining);
[NSThread sleepForTimeInterval:600];
NSLog(@"Finishing background task with %0.1f seconds remaining",application.backgroundTimeRemaining);
//告诉系统我们完成了
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
对于音乐应用来说。对不起,这个就需要在后台运行,用户也认可,所以这类应用你可以在后台一直运行。你也默认了耗电就耗电了吧。
对与location update的情况,我们的应用在进入后台后也应该是会挂起的,只不过你向系统注册了类似的通知,让操作系统帮你monitor用户的位置update,当用户的位置change,ok,操作系统会唤起你的应用,让你有一定的时间来处理这个位置变化的事件。等你处理完毕后系统再次挂起你的应用。这样设计也是合理的。一切在我的掌握下才是最安全和放心的。
其他的情形应该也是类似的情况,系统不会让你的应用一直在后台运行,这会违背苹果的设计初衷。最后膜拜一下苹果。
具体可以参考每种情况的实例:
http://www.raywenderlich.com/29948/backgrounding-for-ios
相关文章推荐
- 关于App进入background状态
- 一行代码让App运行时iPhone不会进入锁屏待机状态
- 隐藏系统状态栏 让app启动时图片全屏 进入程序后显示状态栏方法。
- Android中实现进入App之后检查网络状态
- android app -- 关于listview的几种用法(复用,不复用,半复用)解决item状态改变的问题
- 关于 android app 返回键模拟 home键 功能的介绍_仿QQ返回键 又重新回到当前界面_锁屏状态 又要重新唤醒
- 一行代码让App运行时iPhone不会进入锁屏待机状态
- 关于Android app首次安装完成后在安装界面打开应用再按home键返回桌面,重新进入app重复实例化launcher activity(转)
- 关于Android app首次安装完成后在安装界面直接“打开”应用再按home键返回桌面,重新进入app重复实例化launcher activity的问题的解决
- 关于Android app首次安装完成后在安装界面直接“打开”应用再按home键返回桌面,重新进入app重复实例化launcher activity的问题的解决
- android app -- 关于listview的几种用法(复用,不复用,半复用)解决item状态改变的问题
- 一行代码让App运行时iPhone不会进入锁屏待机状态
- 一行代码让App运行时iPhone不会进入锁屏待机状态
- 一行代码让App运行时iPhone不会进入锁屏待机状态
- 关于Android app首次安装完成后在安装界面直接“打开”应用再按home键返回桌面,重新进入app重复实例化launcher activity的问题的解决
- 关于tomcat7无法进入Manager管理App项目解决方案
- 隐藏系统状态栏 让app启动时图片全屏 进入程序后显示状态栏方法。
- App运行时iPhone不会进入锁屏待机状态
- 关于安卓app打开时会先白一下才进入欢迎界面
- 主题 : 隐藏系统状态栏 让app启动时图片全屏 进入程序后显示状态栏方法。