怎样退出App之前唤醒还有一个App?

Posted liguangsunls

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样退出App之前唤醒还有一个App?相关的知识,希望对你有一定的参考价值。

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送


SDK并没有提供终止应用程序的方法。

要想终止应用程序,苹果推荐的唯一的方式是按下Homebutton。


可是Foundation框架中集成了Darwin框架,从而我们能够使用C函数exit(0)来终止Application。

 

UIApplication的openUrl方法则是退出应用程序的还有一种方法。

当你在代码中调用OpenURL方法时,你的App进程会被终止(挂起),还有一个App则被唤醒。

 

当然两种退出App的机制和终于效果并不同样。

当你使用exit(0)退出程序时,你的App并不不过退出前台,程序所占用的内存也被清除了——这是不可恢复的。

假设再次Launch这个App,ios将又一次从磁盘中读取二进制——这是一份全新的App映像。

 

openURL则不同。它不过把你的程序挂起,这是可恢复的。

你的App不过从前台退出,但后台中仍然存在着。

用户能够在某个时候“唤醒”它,于是你的App又回来了,此时应用程序的状态仍然唤醒之前的状态。

当然,万一你运气不好,iOS也会将你的App彻底从内存中回收,

一如exit(0)所做的一样。这通常是系统内存紧张的时候。

 

这两种方法在某些时候可能须要并存。

比如,我们想在App退出之前。唤醒还有一个App。比方Safari。

同一时候我们希望自己的App是真正的“退出”,回收App的全部内存。


这是一个“悖论”。由于不管exit(0)还是openURL,一旦运行之后,操作系统就会终止进程的运行。

只要运行二者中的不论什么一句语句。另外一个语句就无法运行——由于进程已经终止了。

 

但在某种情况下,通过对iOS多任务机制的巧妙利用。这个悖论却是真实成立的。

比如,我们能够利用例如以下O-C代码来实现这个目的:

 

[self performSelector:@selector(exitApp)withObject:nil afterDelay:0.5];

[[UIApplication sharedApplication]openURL:

[NSURLURLWithString:@"appScheme://"]];

 

exitApp方法实际上就是一句代码exit(0)。

这样二者就实现并存了。


首先。我们让exit(0)延迟0.5秒再运行,而在此之前openURL当然早就运行完了。

performSelector:afterDelay方法将会调度一个任务在某个时间后运行。

当然,这个时间不能太长,】。

由于iOS同意app在进入后台之后仍然有一段“存活”时间,可是这个时间不能太长,

这样即算后面的openURL方法运行后,App仍然处于存活状态,也就有机会去运行所调度任务(即exit(0))。


郝萌主倾心贡献,尊重作者的劳动成果。请勿转载。

假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主。捐赠数额任意,重在心意^_^ 

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

以上是关于怎样退出App之前唤醒还有一个App?的主要内容,如果未能解决你的问题,请参考以下文章

怎样设置kmplayer 关闭时能保持之前播放时的窗口大小?

iOS9中怎样在日历App中创建一个随意时间之前開始的提醒

使用Axure制作App原型应该怎样设置尺寸

Android 实现类似IOS App唤醒的代理方法

uniapp手机连续按两次退格建app退出

app.use 的作用 正则表达式中/ 表示什么 nodejs pm2 怎样安装 乱码怎么解决