App Extension Programming Guide-App Extension Essentials
AppExtension编程指南:扩展基础2
Understand How an App Extension Works
了解应用程序扩展的工作原理
翻译自苹果官方文档 App Extension Programming Guide--App Extensions Essentials
了解应用程序扩展的工作原理
iOS8/OS X v10.10
应用程序扩展不是一个应用,相反,它是主体应用程序(containing app)
中一个单独的包,并能生成单独的二进制文件。与主体应用程序不同,应用扩展实现的是一个特定的、狭义范围内的任务,并且要严格遵循扩展点的协议。
应用程序扩展的生命周期
因为一个应用程序扩展不是一个应用,所以它的生命周期和运行环境也不同于应用。一般情况来说,应用程序扩展的生命周期始于用户从某个应用中启动它。允许用户选择某一种扩展来帮助他们执行某项任务的应用,我们称之为扩展的载体应用(host app)
。载体应用(host app)
定义了激活扩展的上下文环境,并在其发送请求以响应用户操作时开始扩展的生命周期。当应用扩展完成载体应用发送的请求任务后,该扩展的生命周期也随之结束。
比如说,假定这样一个场景,用户在扩展载体应用(host app)
中选中一段文字,点击分享按钮,并从分享列表中选择某一个分享扩展,将选中的内容分享至社交网站。此时,载体应用就会向扩展发送一个包含用户所选文本的请求,启动该扩展,从而去响应用户的请求,即分享所选文本的内容。应用扩展基本的生命周期归纳在下图2-1中。
在图2-1中的第2步中,系统实例化载体应用请求中确定的扩展,并在两者之间建立通信通道。然后扩展在载体应用的上下文场景中显示相关界面,并使用其在载体应用请求中接收到的项目来执行任务(在上述的例子中,扩展接收到的项目是用户选中的文本)
在图2-1的第3步中,用户在扩展中执行或取消某个任务,或者直接可以忽略该扩展。在对用户的操作做出响应的过程中,扩展会根据载体应用的请求立即开始执行任务,但如果有特殊需要时,扩展也会在系统后台执行任务,这种情况下,载体不会显示扩展相关界面,并且用户返回到其先前在载体应用中的上下文环境。当应用扩展执行完任务后,不管是立刻返回还是延迟返回,但最后其执行结果都会返回给载体应用。
当扩展开始执行任务之后(或者开始在系统后台执行任务),系统就会终止扩展,比如图2-1中的第4步。
应用扩展是如何进行通信的
当应用扩展在运行的时候,它只会直接和载体应用(host app)
进行通信,而扩展和主体应用containing app
之间不会直接通信。在扩展运行的过程中,主体应用(containing app)
甚至都不运行。另外,载体应用(host app)
和主体应用(containing app)
之间也不会进行通信。图2-2中描述了运行中的应用扩展
、载体应用(host app)
以及主体应用(containing app)
这三者之间的关系。
当一个扩展需要和主体应用containing app进行通信时,只能在载体应用确定的上下文环境中进行间接通信。比如,一个应用扩展有可能会运行调用它的应用程序。在这个例子中,扩展使用了不能与 containing app 传递消息的API。此外,应用扩展与其 containing app 可以在一个定义为私有的共享容器中访问数据。图2-3描述了扩展和 containing app 之间的间接通信类型。
注意:在底层,系统使用进程间通信来确保应用扩展和扩展载体应用共同来开启无缝结合体验。在你的代码中,你无需考虑这些底层的通信机制,因为你使用的是扩展点和系统提供的高级API。