如何检测iphone app状态的变化?

我发布了这个问题(以及答案),以便其他人可以从一个简洁的技术中受益,我已经发展到让模块自动检测(和响应)iOS应用程序状态更改。 (格式化)博客讨论在这里我的博客     
已邀请:
如果您想要解决让代码执行以响应应用程序状态更改的问题,那么您将找到代码示例,其中将代码调用添加到应用程序委托中,因为每当应用程序执行didFinishLaunchingWithOptions或didBecomeActive或WillEnterBackground时都会调用它。 。 但是,假设您开始使用另一个应用程序,它会重复使用您的大量代码。如果您只是复制一些文件并获得所有功能,而不必担心重新连接应用程序委托方法,那不是很好吗? 总而言之,我们希望插入式模块能够在不需要任何额外工作或连线的情况下完成工作。在这一点上,你可能会说“我也想让独角兽和精灵给我带来披萨”。忍受我。 我不确定在阅读文档时我是如何错过这一点的,但是当iOS应用程序改变状态时,不仅仅是知道它的应用程序委托。 NSNotifications也会针对所有主要州的变化发布。这是直接从api参考文本中获取的文本: 在调用[applicationDidBecomeActive]之后,应用程序还会发布UIApplicationDidBecomeActiveNotification通知,以便为感兴趣的对象提供响应转换的机会。 类似地,有一个UIApplicationDidFinishLaunchingNotification在应用程序完成启动后立即发布,以及其他用于进入后台或进入前台的通知。 所以这简化了我们的代码:而不是必须调用
 [RobustWebService handleAppBecomingActive]
在app delegate的applicationDidBecomeActive实现中,我们只需要让RobustWebService响应UIApplicationDidFinishLaunchingNotification。 现在考虑一下,您可能会意识到,为了让RWS类处理通知,它必须注册为观察者。那个电话看起来像
[[NSNotificationCenter defaultCenter] addObserver:self
Selector:@selector(handleAppBecomeActive)
name:UIApplicationDidFinishLaunchingNotification
object :nil]
那可以在哪里完成?请记住,我们不想触摸应用程序委托,因为这会破坏拥有自包含插入模块的意图。如果只有某种方法让addObserver函数调用自动发生在类中。要是… 在这一点上,我们不得不退出“Cocoa”并深入研究Objective-C的基础技术。果然,有一个类方法,称为“加载”,如果在类定义中存在,它将在首次加载类时自动调用。让我们在代码中重申一下。如果在任何class.m文件中编写此函数
    + (void) load
    {
                // stuff
    }
它将在iOS加载类时运行。有趣的是,它在你的应用程序的main()例程被调用之前运行,所以你必须非常小心你尝试做什么!此时您的大多数应用程序实际上并未运行,但您可以保证您的类链接的所有框架都将首先加载。像NSNotificationCenter这样的框架,所以如果你在class.m中包含它
     + (void) load
     {
      [[NSNotificationCenter defaultCenter] addObserver:self
                Selector:@selector(handleAppBecomeActive)
                name:UIApplicationDidFinishLaunchingNotification
                object :nil];
     }
然后,当您的应用程序变为活动状态时,将调用handleAppBecomeActive方法,而不必在项目中包含class.h和class.m之外执行任何操作。 如果您在class.m文件中包含此代码
+ (void) load;
{
    [[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(handleAppLaunched)
     name:UIApplicationDidFinishLaunchingNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self         selector:@selector(handleAppResigningActive) name:UIApplicationWillResignActiveNotification object:nil];

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

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAppEnteringBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAppEnteringForeground) name:UIApplicationWillEnterForegroundNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAppClosing) name:UIApplicationWillTerminateNotification object:nil];
}
您的课程将收到所有应用程序状态更改的通知,无需其他工作。这太酷了,它仍然让我觉得很刺激。请享用! 特里     

要回复问题请先登录注册