首页 > iOS 用户点击home键对app的影响

iOS 用户点击home键对app的影响

hello everyone,请教问题描述如下:
具体的来说:我使用gcd,后台线程去加载一张图片或者去访问一个后台一个接口,主线程刷界面,在加载图片或者访问接口的过程中(ing),用户点击了home键,过了一会儿后,再次点击app返回,那么我的图片加载线程与后台访问线程会发生什么事情,貌似图片是加载不出来的,这是为什么,如何解决?
抽象的来说:如题,用户点击了home键后,对app有何影响,点击app icon再次返回app后,又会对app有何影响;
之前有了解过,点击home键退出后,系统会保存当前系统的状态,再次进入系统,系统会重新按照之前的状态继续运行,不过实际操作中,还是会让然感觉很诡异,哪位前辈或者大牛,有关这方面的资料或者书,推荐一下也可以

谢谢大家


同求啊。 不过感觉没什么太大的区别吧?


这个问题在苹果的文档里写得挺清楚的。App States and Multitasking

大概写一下我的理解,如果有误请指正。

先回答你的问题:

用户点击了home键,过了一会儿后,再次点击app返回,那么我的图片加载线程与后台访问线程会发生什么事情,貌似图片是加载不出来的,这是为什么,如何解决?

点击 home 键后,后台加载图片就停止了,如果你没有实现苹果提供的几个方法,重新进入应用是不会自动开始的,你要自己实现相关的方法。具体见下文。


下文提到了 iOS 的应用里的几种状态:

应用根据执行的任务不同分为两类:

  1. 需要执行特殊的后台任务(播放音频、定位等)应用允许后台运行,这些应用在用户按下 Home 键后会进入 background 状态继续运行。
  2. 其它应用在按下 Home 键后短暂地进入 inactive 状态,然后紧接着就进入 background 状态。这时候系统会通知你,并且有几秒钟时间来做 clean-up。然后应用就会进入 suspended 状态。

当再次进入你的应用的时候(进入 active 状态),取决于你的应用之前的状态,如果之前是 background 状态,你将有机会重新启动在进入 background 状态时被暂停的任务,其它情况下均相当于重新启动应用。


我假设你的应用是第二种,你需要做的就是在从 active 进入 background 状态时保存数据,记录下应用状态信息,并且释放尽可能多的空间;在从 background 进入 active 的时候接着执行之前的任务。有两种方式:

  1. 实现回调函数
    应用在状态之间转换的时候,会自动调用几个相关的方法,你可以在这些方法里做数据保存之类的事情,这些方法包括:applicationWillResignActive:(这个方法在应用即将进入 background 状态时被调用)、applicationDidEnterBackground:(这个方法在应用进入 background 状态后被调用,这个状态下应用会随时进入 suspended 状态)、applicationWillEnterForeground:(这个方法在从 background 进入 active 状态时被调用)。
    applicationDidEnterBackground: 这个方法是你需要的方法,需要注意的是系统只提供大约 5 秒的时间让你完成工作,超时的话这个方法会被系统强制返回,如果需要更多的处理时间,可以调用 beginBackgroundTaskWithExpirationHandler: 这个方法来申请更多的运行时间,它会在后台线程执行,这个方法也只有有限的时间处理清理工作。详细用法看文档吧。

  2. 监听通知
    应用在状态之间转换的时候,会发送通知,你可以在相关的类里面注册监听这几个通知来做上面说的那些事情。

【热门文章】
【热门文章】