系统Service

持续更新中...

Posted by CoderLeonidas on August 11, 2019

系统Service

简介

Service 是 OSX 应用提供对外服务能力的一种机制

应用遵循约定的方法实现,申明自己为服务的提供者,服务的请求方使用者利用 Service 服务来增强自己应用的功能,提供更好的用户体验

OSX 系统本身提供了大量的服务,通过这些服务能极大的增强单个应用的能力,用户不需要打开其他应用就能获得这项功能的使用

打开系统设置,Shortcuts-> Keyboard> Services 里面可以看到系统中所有的 Services,这里面既包括系统各种应用提供的 Service,也包括安装的第三方应用提供的 Services

另外Finder中也有大量的服务

Service处理流程

Service中有 2 类角色:

  • Service 服务提供者
  • Service 服务使用者

以剪贴板为例,有如下关系图:

  1. Copy 阶段:服务使用者将需要处理的数据写入系统聘贴板对象
  2. Read 阶段:服务提供者从系统剪贴板获取数据
  3. Write 阶段:服务提供者处理完成将结果数据写回剪贴板
  4. Paste 阶段:服务使用者得到处理完成的数据

不是所有的 Service 都需要这 4 个阶段,Service 根据处理流程不同分为 2 类

Processor:这类服务仅仅对数据做处理,只有 copy 和 read 两个阶段。比如一个邮件 Service,选择文本内容,通过服务发送

Provider:服务做为提供者,包括完整的四阶段处理流程。对数据处理完成后需要将处理结果回调给触发服务的应用。

Service服务的定义

Service服务提供方编程

1 实现Service功能接口

2 申明Service

3 注册Service服务

4 测试Service功能

Service服务使用方编程

系统的 NSTextField, NSTextView 等输入控件已经自动实现了服务请求相关方法。如果需要实现自定义的 NSView 控件现服务请求处理,基本的处理流程如下:

    1. 注册服务请求和结果的数据类型
    1. 实现系统服务请求时服务菜单项是否出现的校验
    1. 发送需要处理的数据到剪贴板
    1. 获取数据完成的数据从剪贴板

1 注册数据类型

2 菜单校验

3 发送服务数据到剪贴板

4 从剪贴板读取数据

参考文章

Services Implementation Guide