zoukankan      html  css  js  c++  java
  • 怎样退出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源代码下载:点我传送

  • 相关阅读:
    选择学习Web前端开发的理由
    在Nginx下部署SSL证书并重定向至HTTPS
    使用pm2快速将项目部署到远程服务器
    DNS域名解析过程
    HTML5新特性总结
    基于 HTML5 Canvas 的智能安防 SCADA 巡逻模块
    react中使用css的7种方式
    原生JS实现滑动轮播图
    H5与企业微信jssdk集成
    img图片不存在显示默认图
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6797470.html
Copyright © 2011-2022 走看看