2013-11-25 6 views
1

I Настройка фоновой задачу с beginBackgroundTaskWithExpirationHandler:^{} и даже после окончания задачи, используяUIApplicationState активен в фоновом режиме на прошивке 7

if ([[UIDevice currentDevice] isMultitaskingSupported]) { 
    [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID]; 
    backgroundTaskID = UIBackgroundTaskInvalid; 
    } 

    NSLog(@"App State -- %d", [[UIApplication sharedApplication] applicationState]); 


    if([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive) 
    { 
     //OpenGL operations 
    } 

что я получаю UIApplicationStateActive. Это ошибка? Как еще определить приложение действительно в фоновом режиме?

ответ

0

Вы можете попробовать определить его NSNotification:

- (void)viewDidLoad { 
[super viewDidLoad]; 
UIApplication *app = [UIApplication sharedApplication]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app]; 
} 
- (void)applicationWillResignActive:(NSNotification *)notification { 
//do what you want when your app is in background 
} 
+0

Нет, это не работает, у меня уже есть это. Проблема в том, что applicationWillResignActive: не вызывается перед завершением фоновой задачи. –

+0

Чтобы лучше проиллюстрировать проблему, мне нужно проверить, действительно ли приложение находится в состоянии UIApplicationStateActive и делать некоторые средства рендеринга OpenGLES. Проблема в том, что статус приложения остается UIApplicationStateActive, даже когда приложение выполняется в фоновом режиме, если я использую startBackgroundTaskWithApplicationHandler:^{} даже после выполнения endBackgroundTask. Вы можете увидеть фрагмент кода в сообщении. –

1

Вместо того, чтобы полагаться на значение applicationState, как насчет размещения пользовательских уведомлений в конце фоновой задачи?

Настройка в качестве наблюдателя для настраиваемого уведомления:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(backgroundTaskDidFinish:) name:@"BackgroundTaskDidFinish" object:<either nil or the object that will post the notification>]; 
} 

сообщение пользовательское уведомление, когда фоновая задача завершает

if ([[UIDevice currentDevice] isMultitaskingSupported]) { 
    [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID]; 
    backgroundTaskID = UIBackgroundTaskInvalid; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BackgroundTaskDidFinish" object:self] 
} 

Ответить на уведомление, что ваше приложение должно получить, когда он на самом деле возвращается в активное состояние

- (void)backgroundTaskDidFinish:(NSNotification *)notification 
{ 
    //OpenGL operations 
} 

В качестве альтернативы вы можете найти одно из других уведомлений, которое указывает, что ваше приложение действительно находится в активном состоянии.

Например, добавьте свой объект в качестве наблюдателя для UIApplicationWillEnterForeground. Установите значение BOOL, когда вы получите это уведомление. Затем найдите это значение BOOL вместе со значением UIApplicationState.

Конечно, в какой-то момент вам придется очистить BOOL - скажем, когда вы начинаете эту фоновое задание, поэтому это будет НЕТ, если приложение действительно не активировалось.

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

  • Нет связанных вопросов^_^