博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
怎样退出App之前唤醒还有一个App?
阅读量:4634 次
发布时间:2019-06-09

本文共 1357 字,大约阅读时间需要 4 分钟。

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

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

我要捐赠: 

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源代码下载:

转载于:https://www.cnblogs.com/jhcelue/p/7018603.html

你可能感兴趣的文章
Cassandra 1.2 发布,NoSQL 数据库
查看>>
DataCleaner 3.1.1 发布,数据质量分析管理
查看>>
不同的source control下配置DiffMerge
查看>>
memcached和redis的区别和应用场景
查看>>
【sping揭秘】6、IOC容器之统一资源加载策略
查看>>
转:AbstractQueuedSynchronizer的介绍和原理分析
查看>>
centos 6.8 启动损坏修复实验
查看>>
修改或隐藏Nginx的版本号
查看>>
Android Acitivity 生命周期
查看>>
isolate 通信
查看>>
怎么将jenkins打包后的war自动部署到jetty上?
查看>>
#418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)
查看>>
QLocalServer与QLocalSocket进程通讯
查看>>
JavaWeb——jsp-config
查看>>
微信开放平台之公众号第三方平台开发及全网发布验证
查看>>
作业 3 应用分支与循环结构解决问题 统计字符个数
查看>>
Path Sum
查看>>
数据库Mysql的学习(八)-储存过程和事务和导入导出
查看>>
输出n行杨辉三角数
查看>>
VS2010创建ATL类时需要手动填写ProgID
查看>>