IOS8 理解应用程序扩展是如何工作的
理解应用程序扩展是如何工作的
应用程序扩展不是一个应用程序,它实现一个特定的范围较窄的任务,坚持政策定义为一个特定的扩展点。
应用扩展的生命周期
因为应用程序扩展并不是一个应用程序,它的生命周期和环境是不同的。 在大多数情况下,一个扩展发射当用户选择从一个应用程序的UI或活动视图控制器。 一个应用程序,用户使用选择被称为应用程序扩展 主机应用程序 。 主机应用程序定义了上下文提供的扩展和扩展的生命周期开始时,它发送一个请求来响应用户操作。 延长终止它完成请求后不久收到主机应用程序。
例如,假设一个用户选择一些文本在一个OS X的主机应用程序,激活了分享按钮,从共享列表中选择一个应用程序扩展,帮助他们把文本社交分享网站。 主机应用程序响应用户的选择通过扩展请求包含所选的文本。 这种情况下的广义版本图的第一步 图2 - 1 。
在步骤2 图2 - 1 ,系统实例化应用程序扩展识别主机应用程序的请求,并建立了它们之间的通信通道。 扩展主机应用程序的上下文中显示它的视图,然后使用物品收到主机应用程序的请求来执行其任务(在这个例子中,扩展得到选中的文本)。
在步骤3的 图2 - 1 ,用户执行或取消的任务应用扩展和否认。 为了应对这一行动,扩展完成主机应用程序的请求立即执行用户的任务,或者如果有必要,启动一个后台进程来执行它。 主机应用程序拆毁扩展的视图和用户返回他们之前在主机应用程序上下文。当扩展的任务完成后,是否立即或晚,结果可能会返回到主机应用程序。
应用程序扩展后不久执行其任务(或开始一个背景会话执行),系统终止扩展,如步骤4所示。
应用程序扩展沟通如何
扩展一个应用程序正在运行时,它与主机通信主要应用。 图2 - 2 显示了一个简化视图之间的关系正在运行的扩展,推出了它的主机应用程序,包含应用程序。
没有直接的应用程序之间的通信扩展及其包含的应用程序;通常,包含应用程序甚至不是运行时包含扩展正在运行。 应用扩展的包含应用程序和主机应用程序根本无法沟通。
当一个应用程序扩展需要与它包含应用程序,它间接地通过 扩展上下文 建立了主机应用程序。例如,一个扩展可能要求其包含应用程序打开一个URL。 在这个例子中,扩展使用API,不直接消息包含应用程序。 此外,包含应用程序都可以访问数据的扩展及其在私下里定义的共享容器。 这些类型的间接交流的扩展和它包含的应用程序所示 图2 - 3 。
一些应用程序扩展的api是不可用
因为它的集中系统中的作用,应用扩展是没有资格参与某些活动。 应用程序扩展不能:
-
访问一个
sharedApplication
对象,因此不能使用任何方法的对象 -
使用任何API标志的头文件
NS_EXTENSION_UNAVAILABLE
宏 -
iOS设备上访问摄像头或麦克风
-
执行后台任务(尽管应用程序扩展可以发起上传或下载使用
nsurlsession
对象) -
接收数据使用空投
(应用程序扩展使用空投可以发送数据应用程序相同的方式:采用 UIActivityViewController
类)