2010-10-04 5 views
26

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

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

  1. приложения собирается в фоновом режиме
  2. приложение переход в режим переднего плана

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

Франсуа

ответ

48

Вот как слушать такие события:

// 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) проверке убедитесь, что ваш код будет работать на прошивке 4.0+, а также на IOS 3.x - если вы строите против iOS 4.x или 5.x SDK и установить цель развертывания для iOS 3.x, ваше приложение все равно может работать на устройствах 3.x, но адрес соответствующих символов будет равен нулю, и поэтому он не будет пытаться спросить для уведомлений, которые не существуют на устройствах 3.x (что приведет к сбою приложения).

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

+0

спасибо за быстрый ответ! –

5

Если вы реализуете 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

Смежные вопросы