如何使用UIApplicationDidBecomeActiveNotification?

12

如何使用UIApplicationDidBecomeActiveNotification

当从后台返回前台时重新加载数据,我应该在viewDidLoad还是viewWillAppear中声明它呢?

UIApplicationDidBecomeActiveNotification只有当应用程序从后台返回前台时才会被调用吗?

请帮忙解答。谢谢。

3个回答

27

有时候,当你需要在从后台唤醒时执行一些操作(假设你在该视图控制器上显示此视图控制器),拥有一个UIApplicationDidBecomeActiveNotification的监听器是有用的。在这种唤醒情况下,viewWillAppear不会被触发!

使用示例:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod)     name:UIApplicationDidBecomeActiveNotification object:nil];
}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];

}

->

}

- (void)someMethod
{
    <YOUR CODE AT WAKE UP FROM BACKGROUND>
}

当然,您也可以在应用程序委托类生命周期中实现所需的所有内容。


4

如果您的应用程序在接到电话或推送通知时被打断,您将收到此通知。通常情况下,在中断后,如果您的应用程序正在屏幕上活跃,则会显示。

您可以注册任何在应用程序变为活动状态时加载到内存中的类作为此通知的观察者。

viewDidLoad 中使用以下代码:

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(someMethod:)
                                         name:UIApplicationDidBecomeActiveNotification object:nil];

使用someMethod来处理这个通知。不要忘记在dealloc中将此类作为观察者移除:

[[NSNotificationCenter defaultCenter] removeObserver:self 
                                            name:UIApplicationDidBecomeActiveNotification
                                          object:nil];

4
通常情况下,在viewWillAppear中添加通用类型的观察者(不一定是这种情况),在viewWillDisappear中移除它们更好,因为在您的控制器不在屏幕上时,很多情况下您不需要监视事件。有时甚至会导致错误。 - malex
1
我监控的许多项目中都出现了所提到的错误(=隐式问题)。这不是系统问题,而是架构问题。通常开发人员(特别是初级开发人员)只理解屏幕上的工作循环。但是他们在viewWill(Did)Disappear中更改了某些内容,并忘记了此后viewController仍然可能存在(例如在选项卡中),并且继续接收当前在幕后处理的通知。 - malex

3

这位用户询问了关于应用程序进入后台并再次回到前台时触发的系统通知。处理此情况的通知是UIApplicationDidEnterBackgroundNotification和UIApplicationWillEnterForegroundNotification。如果您需要一个在更广泛的情况下触发的通知,例如当您有系统通知、接听电话、收到短信或向上滑动控制面板,并且在后台运行时,您将需要UIApplicationWillResignActiveNotification和UIApplicationDidBecomeActiveNotification。重要的是要认识到这些是不同的,因为您可能只需要在应用程序进入后台时做出反应,而不是其他情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接