从后台调用应用程序时调用方法

Posted

技术标签:

【中文标题】从后台调用应用程序时调用方法【英文标题】:Calling a method when the application is called from background 【发布时间】:2012-01-26 16:30:18 【问题描述】:

在 Foursquare 等应用程序中,当我单击主页按钮时,应用程序会进入后台。然后当我点击它的图标时,它会在屏幕上加载回内容。

当我将我的应用程序发送到后台然后我将其召回时,它不会将内容加载回屏幕。我在viewDidAppear 方法中输入了我的代码,但它没有被执行。

当应用程序内容变为活动状态时如何加载它?

【问题讨论】:

阅读文档:developer.apple.com/library/ios/documentation/iPhone/Conceptual/… 【参考方案1】:

您需要回复- (void)applicationDidBecomeActive:(UIApplication *)application- (void)applicationWillEnterForeground:(UIApplication *)application 或等效的UIApplication 通知。像viewDidAppear 这样的UIViewController 生命周期调用不会由应用生命周期转换触发。

【讨论】:

这已经在我的 AppDelegate 中了。因此,只需在此处添加代码即可。谢谢。【参考方案2】:

smparkes 的建议是正确的。您可以注册UIApplicationDidBecomeActiveNotificationUIApplicationWillEnterForegroundNotification。在调用这些方法(smparkes 编写的方法)之后调用这些通知。在此通知的处理程序中执行您想要的操作。例如在viewDidLoad 中为您的控制器注册以下通知:

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

不要忘记删除dealloc

[[NSNotificationCenter defaultCenter] removeObserver:self];

最后,doUpdate 方法可能如下

-(void)doUpdate:(NSNotification*)note

    // do your stuff here...

我建议你阅读UIApplicationDelegate class reference。尤其要阅读监控应用程序状态变化

希望对你有帮助。

【讨论】:

我正在使用 ARC,所以我还需要解除分配吗?为什么? 你应该。有关更多信息,请阅读此*** topic。在另一个*** topic 中,解释了为什么应该删除它。希望对您有所帮助。【参考方案3】:

假设您想收听 UIApplicationDidBecomeActiveNotification,这里有可能对您有所帮助的 ObjC 代码。

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification
object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) 

    // custom code goes here.
];

【讨论】:

以上是关于从后台调用应用程序时调用方法的主要内容,如果未能解决你的问题,请参考以下文章

仅在应用处于后台时调用的静默通知回调方法

应用程序在后台时如何每n分钟调用一次方法?

从服务定位器调用教义 2 实体时调用成员函数 get()

页面处于激活状态时调用Js方法

调用模拟上的预期方法时调用方法

选择 UITabBar 时调用方法?