我想创建一个计时器或类似的东西来在x分钟不活动后自动注销用户。我想以与美国银行应用程序相同的方式进行操作。BofA 应用程序执行此操作的方式是,即使将应用程序置于后台,它仍会跟踪时间。当达到时间限制时,将弹出一条通知,说明您正在注销。
当应用程序进入后台时,如何在不暂停计时器的情况下做到这一点?
我想创建一个计时器或类似的东西来在x分钟不活动后自动注销用户。我想以与美国银行应用程序相同的方式进行操作。BofA 应用程序执行此操作的方式是,即使将应用程序置于后台,它仍会跟踪时间。当达到时间限制时,将弹出一条通知,说明您正在注销。
当应用程序进入后台时,如何在不暂停计时器的情况下做到这一点?
我认为您可以做的最简单的事情就是注册您的 AppDelegateNSNotificationCenter
以侦听来自所有(或特定)发件人的所有事件。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetTimer) name:nil object:nil];
您需要注意传递nil
给name
andobject
参数,因为您会收到大量通知(甚至有些不是来自应用程序,即内存警告)。如果您知道或拥有特定事件名称和/或对象的列表,我会改为观察这些。
在您的resetTimer
方法中,您将简单地使前一个计时器无效并创建一个新的计时器,该计时器将调用某个logout
方法并将 iVar 设置为当前日期/时间(即 timerStart = [NSDate now];
)
上述步骤将在前台处理您的应用程序。
当应用程序在后台运行时,计时器将停止工作。但是,当应用程序返回前台时,您可以计算[NSDate now]
与您的timerStart
iVar 之间的增量。如果增量大于某个间隔,则调用您的logout
方法。如果没有,你可以打电话resetTimer
重新开始你的计时器。
编辑
如果您希望后台应用程序提醒用户即将注销,您可以使用UILocalNotification
. 您可以安排一个在应用程序进入后台时发出警报。当应用程序进入前台时,您可以取消该通知(并执行我上面提到的步骤)。