ios - 如何在设备屏幕因不活动而关闭时/之前立即执行方法?

标签 ios objective-c cocoa-touch lifecycle uiapplicationdelegate

我想在我的应用程序因用户不活动而关闭之前执行一些方法(即,当您有一段时间没有触摸时屏幕变黑和手机锁定)。发生这种情况时会调用什么方法?

我猜:

  • 这个方法/这些方法将成为我的 AppDelegate 类的一部分。
  • 这个方法/这些方法类似于-[UIAppDelegate applicationWillResignActive:], -[UIAppDelegate applicationDidEnterBackground:], -[UIAppDelegate willTerminate:]

我在 UIApplicationDelegate 的文档中没有看到任何关于屏幕关闭时触发方法的方法或实践。同样,谷歌搜索术语如“方法不活动应用程序屏幕关闭 objective-c ”也没有显示任何内容。

在这个问题(What method is called before the screen goes black after inactivity?)的先前化身中,多人将我引向以下 Stack Overflow 帖子作为可能的重复:iPhone: Detecting user inactivity/idle time since last screen touch .但是,我确实相信我的问题非常不同:

  • 我的问题:Objective-C 中是否有类似于-[UIAppDelegate applicationWillResignActive:] 等的内置方法。在应用程序仍处于打开状态时一段时间不活动后屏幕变黑时调用的属性或更改的属性?如果没有,我如何在没有这种方法的情况下实现类似的逻辑?
  • 其他用户的问题:无论屏幕状态如何,我如何在预定的用户不活动时间后触发方法?

如果有一种方法可以获取用户在“设置”下为“自动锁定”设置的时间长度(1 分钟、2 分钟、3 分钟、4 分钟),我可以看到另一个问题如何回答我的问题、5 分钟或从不),但我在 UIApplication 的文档中没有看到这样的方法或属性。我想折衷方案是每 1 分钟不活动时检查应用程序是否仍在运行,并假设/假设屏幕关闭时此循环将停止执行,但这对我来说似乎不太-最优解。

我问这个问题的原因是因为我想跟踪我的用户何时使用我的应用程序以及使用了多长时间。我正在创建一个非常基本的 session 核心数据数据库,其中包括 session 开始和结束的时间。由于我还没有找到确定屏幕何时因用户不活动而变黑的方法,因此我的数据目前不准确。

最佳答案

有一个“UIApplicationDidEnterBackgroundNotification”通知,您可以收听该通知以了解您的应用程序何时进入后台。您可以按如下方式注册并在此处指定的选择器中进行处理:

[[NSNotificationCenter defaultCenter] addObserver:someObject 
                                         selector:@selector(someMethodName:) 
                                             name:@"UIApplicationDidEnterBackgroundNotification" object:nil];

同样,您可以收听“UIApplicationDidEnterForegroundNotification”以了解您的应用何时返回前台。

关于ios - 如何在设备屏幕因不活动而关闭时/之前立即执行方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21459262/

相关文章:

ios - 如何在同一个 UIImageView 上同时旋转和缩放?

objective-c - 带前导零的 NSDateFormater

ios - 单击列表项时滚动到 SwiftUI 中的正确位置

ios - 如何在 Keychain 中安装 Apple 推送通知服务证书?

ios - 如何在ios中单击按钮时更改按钮的图像

iphone - 使用 8 个图像在 UIImageView 周围创建边框

ios - 内存未在 ios View 层次结构中释放

objective-c - 动画 viewWillAppear 和 viewWillDisappear?

ios - 如何确保 performSegueWithIdentifier() 只执行一次?

objective-c - 在 Objective-C 中使用内联汇编对变量进行 ROL/ROR