![](/img/trans.png)
[英]how can I automatically stop all background tasks when app is coming in foreground state
[英]Checking how long iPhone App has been in background when coming into foreground
我有一個iPhone應用程序,允許用戶登錄和與Web服務交互。 我希望用戶能夠在一段時間不活動后自動注銷...更具體地說,如果應用程序已經在后台工作超過一段時間(例如1小時)。
理想情況下,我想在App Delegate方法applicationWillEnterForeground中運行一個檢查,檢查應用程序在后台的時間長度,然后是否超過允許的時間,將它們帶到登錄屏幕。
我將如何在上述方法中運行此檢查? 我會很感激一些示例代碼。
如果這不是達到我要求的最佳方式,那么建議也歡迎!
提前謝謝了
安迪
你可以用這個:
- (void)applicationWillResignActive:(UIApplication *)application
{
NSDate *thisMagicMoment = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:thisMagicMoment forKey:@"lastMagicMoment"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSDate *thisMagicMoment = [NSDate date];
NSDate *lastMagicMoment = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"lastMagicMoment"];
if (lastMagicMoment==nil)
{
NSLog (@"First launch!");
}
else
{
NSTimeInterval timeOfNoMagic = [thisMagicMoment timeIntervalSinceDate:lastMagicMoment]/3600.0;
NSLog (@"Application was in background for %.1f hours", timeOfNoMagic);
//do your stuff - treat NSTimeInterval as double
if (timeOfNoMagic > 1.0)
{
//logout
}
}
}
當應用程序進入后台或退出時,將時間和日期寫入NSUserDefaults。 然后從applicationWillEnterForeground中的NSUserDefaults讀取該時間和日期並進行比較。 如果超過1小時(或者您設置的超時時間),則顯示登錄屏幕。
節省應用程序進入NSUserDefaults后台的時間。 然后在重新進入前景時讀取它。
在applicationWillEnterForeground中,如果時差超過1小時,您將設置標志或發布通知。 即你可以在你的app委托中有一個記錄用戶的方法,或者你可以在viewWillAppear中檢查一個標志,如果需要,可以將用戶記錄下來。
首先在方法applicationdidFinishLaunching中設置計時器:
現在檢查方法applicationDidBecomeActive中的時間:每次用戶再次啟動應用程序時都會調用此方法。
如果時間大於ex(1小時),則重置計時器並注銷用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.