iOS内IPC(进程间通信)方法小结

转载 2016年06月02日 09:55:00
受限与iOS系统的运行机制,绝大多数情况下一个应用在进入后台后会马上进入suspend或terminate状态,也就是说不能执行代码,iOS中也没有类似WIndows中Service的概念,但存在某些例外:
1:有某些重要的任务,例如保存用户数据,网络下载等,可以申请一段时间的background运行时间,但时间段内能进行的操作比较有限,且有时间限制,长度为600秒左右。
2:某些特定类型的应用,具体包括:

  •     VoIP应用
  •     定位类应用
  •     新闻类应用
  •     音乐类应用
这些类型的应用可以获得没有时间限制的background运行。但并不是你随便声明一下应用类型就可以了,如果挂羊头卖狗肉,是无法通过App Store审核的。




既然大多数情况下系统中只有一个活动的应用在运行,加上iOS内不同应用由于沙箱运行导致的高度隔离,我们熟悉的那些IPC方法,例如管道、邮槽、共享内存、Socket等,往往会显得比较无力了,针对此种情况,苹果也提供了对应的解决方案,也就是我们今天将要介绍的:URL Schema




简单来说,URL Schema就是iOS内的应用调用协议,应用A可以声明自定义的调用协议,就如http/https那样,当另一个应用B打算在应用内打开应用A时,可以打开使用A自定义的协议开头的URL来打开A,除了协议头,URL中还可以附加其他参数,具体过程参见下图:


这个就是Safari与Alocola之间的交互过程。


接下来介绍一下自定义URL Schema的过程。


1:创建Xcode项目


2:打开项目,在其中的info.plist中添加如下图所示字段:




其中的"lifengzhong"便是我为此应用注册的自定义协议名称,其他应用如果想调用我的应用,只要打开形似:“lifengzhong://XXX”的URL便可以了。


3:在项目AppDelegate中添加函数:
[cpp] view plaincopy



    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation  {      if ([sourceApplication isEqualToString: @"xxx.xxx.xxx"]) {          //xx    }      return YES;  }  


此函数便是URL Call的处理函数了,每当其他应用通过URL打开此应用时,该函数都会被调用。

参数url是传进的url,sourceApplication是呼叫应用的bundle identifier,通过此参数,应用可以对呼叫的应用进行过滤。annotation是呼叫过程中可以附加的额外参数,这里没有用到。


4:当另一个应用想调用我的应用时,只需拼接好URL,,然后打开URL即可,十分方便:


[cpp] view plaincopy



    NSURL* url = [NSURL URLWithString: @"lifengzhong://1,545166"];  [[UIApplication sharedApplication] openURL: url];  


这里的1,545166是我自定义的参数,你可以根据自己需要定义URL的格式。









通过上面介绍的URL Schema方法,算是实现了某种程度的进程间通信,但这种方式的一个缺点是,同一时刻还是只能有一个进程在前台,主动呼叫的应用在调用成功后必须进入后台,所以能传递的只有URL中所带的参数或annotation中所带的参数。调用的过程中会出现应用之间的切换,用户体验不好。但聊胜于无,苹果好歹还是留了这么一个口子,感恩吧。

相关文章推荐

iOS内IPC(进程间通信)方法小结

受限与iOS系统的运行机制,绝大多数情况下一个应用在进入后台后会马上进入suspend或terminate状态,也就是说不能执行代码,iOS中也没有类似WIndows中Service的概念,但存在某些...

iOS内IPC(进程间通信)方法小结

受限与iOS系统的运行机制,绝大多数情况下一个应用在进入后台后会马上进入suspend或terminate状态,也就是说不能执行代码,iOS中也没有类似WIndows中Service的概念,但存在某些...

iOS内IPC-------------进程间通信

受限与iOS系统的运行机制,绝大多数情况下一个应用在进入后台后会马上进入suspend或terminate状态,也就是说不能执行代码,iOS中也没有类似WIndows中Service的概念,但存在某些...
  • hnjyzqq
  • hnjyzqq
  • 2015年01月31日 00:46
  • 510

Linux下到IPC(进程间通信方法比较)

下面涉及到到一些函数,都可以用man命令来获取信息,比如man shmget,或者man 2 write. 进程作为linux系统中分配资源的最小单位,进程间到协作和通信用的范围比较广泛。 ...

IPC之使用Socket进程间通信

  • 2016年11月02日 15:49
  • 1.27MB
  • 下载

细说linux IPC(一):基于socket的进程间通信(上)

【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途】     在一个较大的工程当中,一般都会有多个进...

android_IPC进程间通信Demo

  • 2015年04月13日 10:37
  • 1.26MB
  • 下载

Android IPC进程间通信AIDL方式Demo

  • 2016年01月10日 14:07
  • 387KB
  • 下载

Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析

在上一篇文章中,我们分析了Android系统进程间通信机制Binder中的Server在启动过程使用Service Manager的addService接口把自己添加到Service Manager守...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS内IPC(进程间通信)方法小结
举报原因:
原因补充:

(最多只允许输入30个字)