高性能iOS应用开发(二)(应用的生命周期)

应用的启动 首次启动
应用安装后首次启动时,没有任何的使用状态,也没有本地存储,即没有需要加载的内容或者需要从服务器下载初始数据。
一般的首次启动通常执行多个任务。
例如:

  • 加载应用的默认项(用户的默认设置,子系统的配置)
  • 检查私有/测试版本
  • 获取和初始化应用的唯一标识符
  • 初始化一些第三方SDK的配置(崩溃搜集,推送,埋点等)
  • 初始化网络配置和建立网络链接
  • 建立基础UI(导航器,主题等)
  • 从服务器拉取最新内容和其他的更新
  • 建立内存缓存(数据缓存,图片缓存)
这些子系统的厨师户需要大量的时间,并且彼此之间可能相互依赖,加起来要耗费大量的时间。
对于优化我们可以做到:
  1. 确定在展示UI前必须执行的任务
  2. 按顺序执行任务
  3. 将任务拆分为主线程中执行的任务和非主线程的任务,分开执行
  4. 其他的次要任务(日志消息,跟踪事件)在加载UI后执行或异步执行
上述的优化很大程度上依赖于对子系统的控制方式,主要针对崩溃上报。A/B测试,埋点,网络,图片缓存等。其次也可以提供引导图来延长用户使用时间,达到初始化的目的。
冷启动
除了初次启动意外事件,应用的其他启动(点击app图标启动等)期间,可能需要恢复原来的状态,比如,消息的聊天记录,用户上次浏览的文章页面,登陆用户的证书等等。
对于载入之前的状态多数需要从本地缓存加载数据,或者从服务器拉取数据。
一般先是加载旧的数据,最新的数据可用时再更新,将两个数据源同时注入视图中。
热启动
热启动指的是切换一个已经运行的应用。
  1. 应用重启
当用户点击应用图标时,一般不需要执行其他特殊的操作。
应用处于安全状态,或者运行很多动画时,可以监测背景和前景通知。在第一种情况下,应用每次进人前最状态时,都会展示登录界面,在后一种情况下,动画或者游戏状态会被智停,需要恢复。
  1. 深层链接
当应用接收到application:openURL:sourceAppltcation:annotation:回调时,期望能跳转到应用的特定页面,实现用户想要完成的操作。但此时的目标应用可能已经发生变化,处于某一特定状态了。如果深层链接需要从服务器获取数据,那么可以先展示与深层链接相关的原始页面,或者先展示一个进度条,等从服务器获取到了最新数据,再执行刷新操作。
升级后启动
应用升级后的首次启动将遵循下列情形之一:
  • 无本地缓存成应用完全放弃缓存
  • 本地级存可用,可以直接使用或需要切换至升级版本。
如果无本地级存或应用决定放弃缓存(例如,数据不可用或从服务器同步获取更快),则不需要进行特殊处理。
【高性能iOS应用开发(二)(应用的生命周期)】本地数据发生改变时通知用户。以下的最佳实践可以让用户有更好的体验。
  • 如果木地缓存可用,通知用户该情况。如果没有迁移到本地级存的必要,则无需通知用户,因为本地级存的使用是隐式的。
  • 如果必须花几分钟对数据进行迁移,那么向用户展示个可以推迟该操作的选项。
  • 如果从服务器检索数据更快、更容易,因而必须放弃本地缓存的使用,那么这种情况下需要通知用户。

    推荐阅读