现在的位置: 首页 > 综合 > 正文

ios7 多任务 VS ios7之前多任务

2012年08月13日 ⁄ 综合 ⁄ 共 2151字 ⁄ 字号 评论关闭

iOS 7引入了“Scheduled updates”机制,允许任何类型的App创建后台进程,用于App状态的更新。
这种更新有两种模式:“拉取模式”和“推送通知模式”.前者是主动更新,后者是收到远程通知后被动
更新。当选择拉取模式并创建相应代码后,设备处于WiFi网络并且启动后,App就会自动连接服务器获取
相关数据,并根据用户使用的时间智能地判断拉取数据的频率等。而选择推送通知模式后,当设备收到
远程通知以后才触发获取数据的代码,从服务器获取数据之后再通知用户。

这种机制的引入,在真实的多线程和功耗之间做了更好的平衡,使得iOS的多任务机制更加智能和完善,
而新的多任务界面,也是众望所归,可以预览后台App的界面,滑动删除进程,用户体验较之前的系统
提升很大。

 

iOS 7 则可以下载各种玩意和定时抓取。

不过对于开发者来说,iOS 7 还有 2 个需要注意的区别:

  1. iOS 7 以前,应用进入后台继续运行时,如果用户锁屏了,那么 iOS 会等待应用运行完,才进入睡眠状态。
    而在 iOS 7 上,系统会很快进入睡眠状态,那些后台应用也就暂停了。如果收到事件被唤醒(例如定时事件、推送、位置更新等),后台应用才能继续运行一会。
    因为处理过程变成了断断续续的,因此下载时也要使用 NSURLSession 来处理(即下文中的 Background Transfer Service)。
  2. 由于 App Switcher 的存在,应用即使在后台,用户仍然能看到它在退出前的快照。如果有什么不可见人的东西(例如刚拍的艳照啦,劲爆的聊天内容啦,银行卡密码什么的),就处理下界面来隐藏吧。

顺便再介绍下三个新东西:

  1. Background Fetch。可以设置应用在后台至少隔多久时间就去抓取一下更新(注意是至少,不保证达到这个频率)。以微博来举例,如果用户的微博被别人评论了,iOS 7 之前得让微博的服务器来推送一条通知,用户接收到后,进入该条微博,等待加载该评论;而 iOS 7 上则可以让用户每隔一定时间(如一分钟)查询一下有没有更新,发现有则下载更新的内容,然后发送一条本地通知给用户,用户接收到后,进入该条微博,显示在后台下载好的评论内容。如果需要的话,连
    timeline 都能给你提前更新了。
    很显然,这种做法体验更好,但更费流量和电池。
  2. Silent Remote Notification。iOS 7 之前的推送会直接弹出一个对话框,用户确认后才会进入应用;而 iOS 7 上则可以不弹出对话框,而是直接通知应用去下载更新,等下完后再发送本地通知给用户,这样用户进入应用后,就能直接看到更新的内容了。
    这种做法就比前者好些,不需要在后台轮询了。只是用户如果对更新内容不感兴趣,也会被强制下载。
    为了避免被滥用,这种推送有频率限制(每小时几次),所以推送 QQ、微信这类经常被刷屏的消息肯定没戏。
  3. Background Transfer Service。iOS 7 之前的应用可以在后台继续运行一段时间来下载,但如果因为各种原因而导致应用被退出了(被用户杀掉,内存不足或超时被系统杀掉等),那么下载是得不到保证的。iOS 7 的后台传输服务则可以让系统去下载,出错或下完后通知并唤醒应用来处理。
    对用户来说的好处就是,想离线缓存影片时,可以让优酷之类的应用在后台下载,自己放点音乐看看漫画,而不用傻傻地开着优酷等待下完。上传当然也是支持的,基友再也不用担心你没空发小电影什么的了。此外,1 和 2 里提到的后台下载,也都会用到 3。
    为了避免浪费流量,该服务只会在 WiFi 环境下才进行传输。

需要特别注意的是:应用被以上三类唤醒时,只被给予几秒钟时间来处理更新。

 

 

 

ios7 之前多任务

简单来说,iOS app类型可以分为三种:
1. 保存现场。按下Home键10秒内直接杀死进程,并释放内存

2. iOS支持的“多任务”。按下Home键转入多任务状态,保留在内存中,但只能系统允许的动作:
比如GPS,比如VoIP,比如Streaming Music等等。

3. 真正的桌面级别的多任务。只有Safari/Mail是,苹果嫡系大都都不是。
这个级别的app在后台没有任何限制动作。

无限制动作的程序,一会在用户无察觉的情况下耗光电力,二会有安全上面的问题
顺便提一句,后两种占用内存的app,也会在任意时间从内存中被砍掉,取决于你是
否动用了其它app而导致内存不足。
真正不会被砍掉的后台,只有苹果那个通知系统。

 

1.实现长时间的后台任务

  IOS应用程序可以请求在后台运行的特殊服务有:

     audio:在后台提供声音播放功能,包括音频流和播放视频时的声音

     location:在后台可以保持用户的位置信息

     voip:在后台使用VOIP功能

  这些应用程序并不连续的运行,但是会被系统框架在合适的时间唤醒,以实现这些服务。

2.在后台完成有限长度的任务   

在被终止之前的任意时间,应用程序会调用beginBackgroundTaskWithExpirationHandler:方法让
系统给出额外的时间来完成一些需要在后台长时间执行的任务。 
(UIApplication的backgroundTimeRemaining属性包含程序运行的总时间)。
一般它的执行时间是应用程序转入到后台的600秒之内执行,超过600秒自动切 断

 

抱歉!评论已关闭.