Подтвердить что ты не робот

Iphone 4 sdk: обнаружение возврата из фонового режима

Как я могу обнаружить, что приложение только что вернулось из "фонового режима"? Я имею в виду, что я не хочу, чтобы мое приложение получало данные (каждые 60 секунд), когда пользователь нажимал кнопку "home". Но я хотел бы сделать некоторые "специальные" обновления при первом запуске приложения в режиме переднего плана.

Как я могу обнаружить эти два события:

  • приложение переходит в фоновый режим.
  • приложение переходит в режим переднего плана.

Спасибо заранее.

Франсуа

4b9b3361

Ответ 1

Здесь, как слушать такие события:

// Register for notification when the app shuts down
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillTerminateNotification object:nil];

// On iOS 4.0+ only, listen for background notification
if(&UIApplicationDidEnterBackgroundNotification != nil)
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationDidEnterBackgroundNotification object:nil];
}

// On iOS 4.0+ only, listen for foreground notification
if(&UIApplicationWillEnterForegroundNotification != nil)
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillEnterForegroundNotification object:nil];
}

Примечание. Проверки if(&SomeSymbol) гарантируют, что ваш код будет работать на iOS 4.0+, а также на iOS 3.x - если вы создаете против iOS 4.x или 5.x SDK и установите цель развертывания для iOS 3.x ваше приложение все еще может работать на устройствах 3.x, но адрес соответствующих символов будет равен нулю, и поэтому он не будет пытаться запрашивать уведомления, которые не существуют на устройствах 3.x(что приведет к сбою приложения).

Обновление: В этом случае проверки if(&Symbol) теперь избыточны (если вам действительно не нужна поддержка iOS 3 по какой-либо причине). Однако полезно знать этот метод для проверки наличия API перед его использованием. Я предпочитаю эту технику, чем тестирование версии ОС, потому что вы проверяете, присутствует ли конкретный API, а не используют внешние знания о том, какие API-интерфейсы присутствуют в версиях ОС.

Ответ 2

Если вы реализуете UIApplicationDelegate, вы также можете подключаться к функциям как часть делегата:

- (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(@"Application moving to background");
}


- (void)applicationWillEnterForeground:(UIApplication *)application {
  /*
   Called as part of the transition from the background to the active state: here you can undo many of the changes made on entering the background.
   */
    NSLog(@"Application going active");
}

Для справки протокола см. http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html