如何检测 App 何时移入/移出 Suspended 状态?
Posted
技术标签:
【中文标题】如何检测 App 何时移入/移出 Suspended 状态?【英文标题】:How to detect when App moves to/from Suspended state? 【发布时间】:2012-02-01 10:45:57 【问题描述】:是否有一个事件被触发,或者有什么方法可以告诉我的应用何时进入或退出暂停状态?
编辑:我已经阅读了与 AppDelegate 事件相关的所有文档,并且我知道没有任何方法可以从该类检测移动到暂停状态。
具体来说,如果我的应用正在后台播放音乐,并且音乐被暂停(例如通过遥控器),那么音乐以及不久之后的所有执行都会暂停。 当用户再次通过遥控器(或锁定屏幕)按下播放时,音乐再次开始并继续执行(应用程序从挂起状态移动到后台状态)。 有什么办法可以检测到这个吗?我需要关闭一些服务,例如断开网络套接字、停止 bonjour 服务等...
【问题讨论】:
【参考方案1】:看看这张图片,它显示了应用程序的完整生命周期
http://www.cocoanetics.com/files/UIApplication_Delegate_post_4_v121.jpg
【讨论】:
【参考方案2】:我最终使用了应用程序退出/变为活动状态和(因为我的应用程序在后台播放音频)Audiosession 对象的 Begin 和 End AudioInterruption 事件以及任务完成处理程序的回调决定我的应用是否即将暂停。
例如(伪代码):
if(BeginAudioInterruption && AppIsInBackground)
WillSuspend();
else if(AppWillResignActive && MusicPlaying == false)
WillSuspend();
else if(AppWillResignActive && TaskCompletion.TimeRemainingSeconds < 5 && MusicPlaying == false)
WillSuspend();
else // etc...
【讨论】:
以上是关于如何检测 App 何时移入/移出 Suspended 状态?的主要内容,如果未能解决你的问题,请参考以下文章
如何防止鼠标移出移入子元素触发mouseout和mouseover事件