ios应用程序间互相启动

网友投稿 675 2022-11-08

ios应用程序间互相启动

ios应用程序间互相启动

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

1:有某些重要的任务,例如保存用户数据,网络-等,可以申请一段时间的background运行时间,但时间段内能进行的操作比较有限,且有时间限制,长度为600秒左右。

2:某些特定类型的应用,具体包括:

VoIP应用定位类应用新闻类应用音乐类应用

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

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

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

1:创建Xcode项目

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

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

3:在项目AppDelegate中添加函数:

[cpp]  ​​view plain​​​ ​​​copy​​

- (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 plain​​​ ​​​copy​​

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Memcache和mysql交互流程操作原理
下一篇:实现滑动菜单SlidingMenu
相关文章

 发表评论

暂时没有评论,来抢沙发吧~