當我的應用程序轉到後臺時,出於數據保護原因,它必須模糊當前屏幕。屏幕的內容不能在任務管理器窗口中看到,所以模糊例程必須在應用程序退出前完成。隨着每個UI更新,模糊必須發生在主循環中。它只是在正常的主視圖上添加模糊的視圖。但是,這需要一點時間才能完成,這就是問題所在。iOS不平衡調用applicationWillResignActive:和applicationDidBecomeActive:
我從applicationWillResignActive調用我的模糊例程:正如Apple的建議。現在我們假設完成任務需要0.2秒。如果應用程序將在短時間內重新激活,則不調用applicationDidBecomeActive:(它應該再次打開我的屏幕,因此模糊了)。
也許你認爲在如此短的時間內「關閉」和「打開」應用程序並不是正常的用戶行爲,而是考慮輕敲屏幕的上邊緣並稍微向下移動,只是意外同時嘗試點擊位於上邊緣的按鈕。這將激活通知中心僅幾分之一秒。這就夠了。
只是爲了使這一問題的透明,看看這個AppDelegate中,將張貼不平衡調用控制檯:
@implementation UHAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"applicationWillResignActive - performing some tasks...");
// let the main loop do some work...
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.2]];
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"applicationDidBecomeActive");
}
- (void)applicationWillTerminate:(UIApplication *)application
{
}
@end
任何想法如何實現呼叫applicationWillResignActive均衡數:和applicationDidBecomeActive:在這種情況下...?
THX很多關於你的幫助 烏
你的applicationWillResignActive如上所述沒有做什麼? – GuybrushThreepwood
它的確如此 - 它會在控制檯中發佈一個音符,並阻止主循環0.2秒,就像主循環中的其他方法調用所做的那樣。 –
如果以正常速度執行通知中心的「向下拖動」並讓其再次翻轉,則會得到一個平衡的呼叫日誌(「applicationWillResignActive - 執行某些任務」,並在「翻轉」):「applicationDidBecomeActive 「)。但是,如果您只是在屏幕上方做了一個快速的「點擊並向下翻轉」,則只會出現「applicationWillResignActive - 正在執行某些任務」,儘管該應用已重新啓動) –