gpt4 book ai didi

iOS 不平衡调用 applicationWillResignActive : and applicationDidBecomeActive:

转载 作者:可可西里 更新时间:2023-11-01 06:08:50 26 4
gpt4 key购买 nike

当我的应用进入后台时,出于数据保护的原因,它必须模糊当前屏幕。屏幕内容不能在任务管理器窗口中看到,因此必须在应用程序退出之前完成模糊例程。随着每次 UI 更新,模糊处理必须在主循环中进行。它只是在普通主视图上添加了一个模糊 View 。然而,这需要一点时间才能完成,这就是问题所在。

我按照 Apple 的建议从 applicationWillResignActive: 调用我的模糊例程。现在假设完成任务需要 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: 的平衡调用次数的任何想法......?

非常感谢您的帮助乌多

最佳答案

经过一些测试,我意识到可能会有一些妥协。

看来applicationDidBecomeActive:只是和applicationDidEnterBackground:平衡了

在我的例子中,这意味着模糊应该在后一种方法中进行。归根结底,这意味着如果用户通过调用通知中心或调用任务管理器“离开”我的应用程序,将不会出现屏幕模糊。然而,关于数据安全,这不应该是一个重量级的问题,因为很明显只有有权访问我的应用程序的用户才能执行这些步骤。

当通过单击“主页”一次离开应用程序、进入待机状态或通过任务管理器更改前台应用程序时,applicationDidEnterBackground: 被调用,经过一些测试,它似乎从操作系统获得了足够的时间来执行模糊在主循环上。

但是,如果你坚持原来的问题,这仍然没有解决。

关于iOS 不平衡调用 applicationWillResignActive : and applicationDidBecomeActive:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com