Фоновый процесс iphone давно не работает в моем приложении

Я работаю с фоновым процессом iphone в своем приложении. он работает в фоновом режиме, но через 10 минут мое приложение завершает работу. И давно не работает.

Мое приложение содержит 1 счетчик с таймером, когда viewdidload в это время запустит мой счетчик, и когда я нажму кнопку «Домой», он будет работать в фоновом режиме. В фоновом режиме он работает отлично, но через 10 минут мой фоновый процесс останавливается. Ниже приведен мой код для этого.

в файле .h.

IBOutlet UILabel *thecount;
int count;
NSTimer *theTimer;
UIBackgroundTaskIdentifier counterTask;

in my .m

- (void)viewDidLoad {

    UIBackgroundTaskIdentifier bgTask = nil;
    UIApplication  *app = [UIApplication sharedApplication];


    counterTask = [[UIApplication sharedApplication]
                   beginBackgroundTaskWithExpirationHandler:^{
                       [app endBackgroundTask:counterTask]; 
                       //counterTask = UIBackgroundTaskInvalid;

                       // If you're worried about exceeding 10 minutes, handle it here
                       theTimer=[NSTimer scheduledTimerWithTimeInterval:0.5
                                                                 target:self
                                                               selector:@selector(countUp)
                                                               userInfo:nil
                                                                repeats:YES];
                   }];

    count=0;
    theTimer=[NSTimer scheduledTimerWithTimeInterval:0.5
                         target:self
                         selector:@selector(countUp)
                         userInfo:nil
                         repeats:YES];

    [super viewDidLoad];
}
  • (недействительно) countUp {

     count++;
     NSString *currentCount;
    
     currentCount=[[NSString alloc] initWithFormat:@"%d",count];
     NSLog(@"timer running in background :%@",currentCount);
     thecount.text=currentCount;
     [currentCount release];
    

}

Приведенный выше код просто образец для подсчета числа переднего плана и фона. но через 10 мин не работает.

Поэтому, пожалуйста, помогите мне и помогите мне в этом.


person Hrushikesh Betai    schedule 22.02.2012    source источник
comment
из более доброго поиска в Google я нашел, как реализовать фоновый процесс, и он будет работать для всех ios, кроме ios 3.0.. mindsizzlers.com/2011/07/ios-background-location   -  person Hrushikesh Betai    schedule 09.11.2012


Ответы (1)


10 минут — это максимум, который вы получаете для длительных фоновых задач. iOS не продвигает идею длительных фоновых процессов, и ради вашего пользователя вы не должны пытаться это делать.

Чтобы ваш код работал дольше, некоторые другие внешние события могут заставить ваше приложение снова проснуться или продолжать работать, например. События местоположения GPS, воспроизведение аудио или входящие соединения VoIP в вашем приложении типа VoIP.

person macbirdie    schedule 22.02.2012
comment
Спасибо за ответ. в моем приложении я время от времени отправляю данные GPS на сервер. выше это просто код для работы в фоновом режиме. не могли бы вы предоставить подробный пример того, как отправлять данные GPS на мой сервер в какое-то время, и приложение должно работать. так что я могу это понять. - person Hrushikesh Betai; 22.02.2012
comment
Поэтому всякий раз, когда вы получаете уведомление о местоположении устройства, вы можете запланировать задачу для отправки этого местоположения на сервер. Вы можете сделать это из метода locationManager:didUpdateToLocation:fromLocation в вашем классе реализации CLLocationManagerDelegate-протокола. - person macbirdie; 22.02.2012
comment
о, вы не поняли мою мысль, я отслеживаю пользователя в фоновом режиме в определенную разницу во времени. поэтому я должен реализовать подобную фоновую задачу. я хочу реализовать это, но не могу правильно понять ответ. хотел бы направить меня? - person Hrushikesh Betai; 22.02.2012
comment
О верно. Как вы можете видеть из потока, на который вы ссылаетесь, невозможно произвольно запустить ваш код, скажем, через час с момента перехода в фоновый режим. Вы можете только настроить минимальное расстояние, на которое устройство пользователя будет перемещаться, чтобы приложение уведомлялось об изменении. Если вы заявите, что ваше приложение воспроизводит фоновый звук или обрабатывает услуги VoIP, хотя на самом деле это не так, ваше приложение будет отклонено Apple. - person macbirdie; 22.02.2012
comment
Вы объясните это глубоко, если с примером, чем это будет хорошо. я не могу понять вашу точку зрения. - person Hrushikesh Betai; 22.02.2012
comment
Нет примера для демонстрации — просто посмотрите CLLocationManager или прочитайте Руководство по определению местоположения. - person macbirdie; 22.02.2012