如何使用UIApplicationDidBecomeActiveNotification

时间:2014-01-14 06:18:08

标签: ios objective-c cocoa-touch

如何使用UIApplicationDidBecomeActiveNotification

我应该在viewDidLoadviewWillAppear中声明它,以便在从背景到前景时重新加载数据。

只有当应用从背景到前景时才会调用UIApplicationDidBecomeActiveNotification吗?

请帮忙。 感谢。

3 个答案:

答案 0 :(得分:26)

当你需要在视图控制器中从后台唤醒时有一个 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>
}

当然,您也可以在app delegate类生命周期中实现所需的一切。

答案 1 :(得分:4)

如果您的应用被电话或推送通知中断,您会收到此通知。通常,如果您的应用程序在中断后在屏幕上处于活动状态。

您可以注册任何类,当应用程序将作为此通知的观察者激活时加载到内存中。

viewDidLoad中使用以下代码:

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

使用someMethod来处理此通知。并且不要忘记在dealloc中删除此类作为观察者:

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

答案 2 :(得分:2)

OP询问了当应用程序背景化然后再次前瞻时触发的系统通知。旨在处理这种情况的通知是UIApplicationDidEnterBackgroundNotification和UIApplicationWillEnterForegroundNotification。如果您希望在更广泛的情况下触发通知,例如当您收到系统通知时,请拨打电话,收到短信,或者您向上滑动控制面板,以及背景,然后您将需要UIApplicationWillResignActiveNotification和UIApplicationDidBecomeActiveNotification。重要的是要认识到这些是不同的,因为如果你的应用程序是后台的,你可能只需要做出反应,而不是其他场景。