如何检测 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事件

用原生JS写关于鼠标移入移出ul的二级菜单问题,怎么都实现不了效果

jQuery链式调用、鼠标移入移出、轮播、键盘事件

jquery鼠标移入移出

vue中鼠标移入移出,怎么让其切换到里面的内容

从左到右将 UIView 移出屏幕并从左再次将其移入