应用扩展如何工作 -- iOS8/OS X v10.10应用扩展编程指南

一个应用程序扩展不是一个应用,它在主体应用程序中单独打包并生成单独的二进制文件。应用程序扩展不同于一个应用程序,它的功能相对于应用来说更加明确、单一,并且要严格遵循扩展点的协议。

应用程序扩展的生命周期

因为一个应用程序扩展不是一个应用,所以它的生命周期和运行环境也不同于应用。一般情况来说,应用程序扩展的生命周期开始于用户从某个应用中使用它。这个应用能够让用户选择某一种扩展来实现某个特定功能或任务,这种应用我们称为扩展载体应用。当扩展载体应用给扩展发送一个请求,让扩展代替响应用户的操作时,应用扩展就会被激活并意味着生命周期也随之开始。当应用扩展完成载体应用发送的请求任务后,该扩展的生命周期也随之结束。

比如说,有这样一个场景,用户在扩展载体应用中选中一段文字,并点击分享按钮,从分享列表中选择某一个分享扩展,将选中的内容分享至社区网站。此时,扩展载体应用就会启动该扩展,让它去响应用户的请求,即分享所选文本的内容。应用扩展基本的生命周期归纳在下图2-1中。
生命周期

在图2-1中的第2步中,系统实例化扩展载体应用中定义好的扩展,并建立载体应用于扩展之间的通信通道。然后扩展会根据上下文场景显示相关的界面,并使用载体应用接收到的信息执行用户的操作(在上述的例子中,分享扩展就使用用户选中的文本信息来执行相关操作)。

在图2-1的第3步中,用户在扩展中执行或取消某个任务,或者直接可以忽略该扩展。在对用户的操作做出响应的过程中,扩展会根据载体应用的请求立即开始执行任务,但如果有特殊需要时,扩展也会在系统后台去执行任务,这种情况下,扩展不会显示其相关界面,并且载体应用会显示用户操作扩展前的界面。当应用扩展执行完任务后,不管是返回还是延迟返回,但最后其执行结果都要返回给载体应用。

当扩展开始执行任务之后(或者开始在系统后台执行任务),系统就会终止扩展,比如图2-1中的第4步。

应用扩展是如何进行通信的

当应用扩展在运行的时候,它会直接和载体应用进行通信。但是应用扩展不会和调用它的应用进行直接通信,因为有可能应用扩展在运行,但是调用它的应用程序并没有运行。另外还有一点,扩展载体应用和调用扩展应用之间是绝对不会进行通信的。图2-2中描述了应用扩展、载体应用、调用扩展应用之间的关系。
关系

当一个扩展需要和调用它的应用进行通信时,只能间接的通过扩展载体应用提供的上下文进行。比如说,一个应用扩展有可能会运行调用它的应用程序。在这个例子中,应用扩展不能通过API直接和调用它的应用传递消息。但是,应用扩展和调用它的应用可以共同访问一个定义为私有的共享容器。在图2-3中描述了扩展和调用扩展应用之间通信的模式。
通信

注意:在底层,系统使用进程间通信来确保应用扩展和扩展载体应用做到无缝结合。在你的代码中,你从来不会考虑这个通用的通信机制。那是因为我们使用的扩展API是扩展点和系统已经高度封装后的。

原文地址:Understand How an Extension Works

分享到: