在AppDelegate中使用背景/前景方法

我打算在我的应用程序中实现多任务。 我可以看到许多方法在AppDelegate这样做applicationWillResignActiveapplicationDidEnterBackgroundapplicationWillEnterForeground ,…

但是……我没有看到他们应该使用的方式,也不知道他们为什么不在ViewControllers中,也不是他们在这里。

我的意思是:当应用程序进入后台,我不知道我的用户是哪个视图。 回来,当应用程序进入前台,我怎么知道该怎么做,我可以打电话,更新视图例如?

我会理解,如果这些方法在每个视图控制器,但在这里,我没有看到他们可以用什么具体的方式…

你能帮我理解实现这些方法的方法吗?

当应用程序进入后台时,每个对象都会收到UIApplicationDidEnterBackgroundNotification通知。 因此,当应用程序在后台运行时运行一些代码,你只需要听取那个你想要的通知:

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

不要忘记在不需要再听的时候释放听众:

 [[NSNotificationCenter defaultCenter] removeObserver:self]; 

而最好的,你可以用以下通知玩相同的方式:

  • UIApplicationDidEnterBackgroundNotification
  • UIApplicationWillEnterForegroundNotification
  • UIApplicationWillResignActiveNotification
  • UIApplicationDidBecomeActiveNotification

玩的开心 ! 🙂

如果这个答案帮助你,我会很高兴收到upvote 😉

它们不在任何视图控制器中,因为iOS采用了“委托”devise模式,在这种情况下,您可以放心,在需要时,方法将触发类(在本例中为应用程序的应用程序委托)。

作为一个学习过程,为什么不把NSLog的方法放在这些方法中来看看它们何时被解雇呢?

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSLog(@"didFinishLaunchingWithOptions"); [self.window makeKeyAndVisible]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { /* Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. */ NSLog(@"applicationWillResignActive"); } - (void)applicationDidEnterBackground:(UIApplication *)application { /* Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. If your application supports background execution, called instead of applicationWillTerminate: when the user quits. */ NSLog(@"applicationDidEnterBackground"); } - (void)applicationWillEnterForeground:(UIApplication *)application { /* Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. */ NSLog(@"applicationWillEnterForeground"); } - (void)applicationDidBecomeActive:(UIApplication *)application { /* Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. */ NSLog(@"applicationDidBecomeActive"); } - (void)applicationWillTerminate:(UIApplication *)application { /* Called when the application is about to terminate. See also applicationDidEnterBackground:. */ NSLog(@"applicationWillTerminate"); }