我想在我的应用关闭之前执行一些方法,因为用户不活动(即,屏幕变黑并且当你有一段时间未触摸时手机锁定)。发生这种情况时会调用哪种方法?
我在猜测:
-[UIAppDelegate applicationWillResignActive:]
,-[UIAppDelegate applicationDidEnterBackground:]
,-[UIAppDelegate willTerminate:]
。我没有在UIApplicationDelegate的文档中看到有关屏幕关闭时触发方法的方法或做法的任何内容。同样,谷歌搜索术语,如“方法不活动应用程序屏幕关闭目标c”也没有改变任何东西。
在此问题的先前版本中(What method is called before the screen goes black after inactivity?),多个人指示我将以下Stack Overflow帖子作为可能的副本:iPhone: Detecting user inactivity/idle time since last screen touch。但是,我确实相信我的问题非常不同:
-[UIAppDelegate applicationWillResignActive:]
等。当应用程序仍处于打开状态时,如果屏幕在一段时间不活动后变为黑色,则会调用或更改属性?如果没有,我怎么能在没有这种方法的情况下实现类似的逻辑呢?如果有一种方法可以获得用户在“设置”下设置“自动锁定”的时间长度(1分钟,2分钟,3分钟,4分钟),我可以看到另一个问题如何回答我的问题,5分钟或从不),但我在UIApplication的文档中没有看到这样的方法或属性。我想妥协是检查应用程序是否仍然每1分钟不活动运行,假设/假设这个循环将在屏幕关闭时停止执行,但这对我来说似乎是一个小于 - 最佳解决方案。
我问这个问题的原因是因为我希望跟踪我的用户何时使用我的应用以及持续多长时间。我正在创建一个非常基本的会话核心数据数据库,其中包括会话开始时和结束时间。由于我没有找到一种方法来确定由于用户不活动而导致屏幕变黑的时间,因此我的数据目前不准确。
答案 0 :(得分:2)
有一个'UIApplicationDidEnterBackgroundNotification'通知,您可以在应用程序进入后台时收听。您可以按如下方式注册并在此处指示的选择器中处理它:
[[NSNotificationCenter defaultCenter] addObserver:someObject
selector:@selector(someMethodName:)
name:@"UIApplicationDidEnterBackgroundNotification" object:nil];
同样,您可以收听“UIApplicationDidEnterForegroundNotification”以了解您的应用何时回到正面。
答案 1 :(得分:0)
据我所知,当您的设备被锁定时,您的应用的处理方式与暂停并发送到非活动后台应用的方式完全相同。我觉得这是简单的状态保存/恢复问题(因此不需要定时器)。请查看以下关于状态的链接:Apple's Guide on states