嗨,我有一个任务要使用Nstimer和后台进程来开发应用程序。

我已经使用计时器实现了后台进程。它很好,但是当我第一次最小化应用程序时,我没有问题,它没有运行后台进程。减少3至4次使用后。之后,它运行正常。我还显示后台任务和计时器的代码,如下所示。

 - (void)applicationDidEnterBackground:(UIApplication *)application {

    UIApplication*    app = [UIApplication sharedApplication];
    NSLog(@"Application enter in background");
    [NSTimer scheduledTimerWithTimeInterval:2.0f
                                     target:self
                                   selector:@selector(updateCounter:)
                                   userInfo:nil
                                    repeats:YES];
}


我的updateCounter方法如下所示:

    - (void)updateCounter:(NSTimer*)timer {

    NSString *id = [[UIDevice currentDevice] uniqueIdentifier];
    NSLog(@"uniqueid:%@",id);

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];

    CLLocation *location = [locationManager location];

    // Configure the new event with information from the location
    CLLocationCoordinate2D coordinate = [location coordinate];

    NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude];
    NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude];

    NSLog(@"dLatitude : %@", latitude);
    NSLog(@"dLongitude : %@",longitude);

}


是他们任何与问题相关的代码,请帮助我解决。

最佳答案

首先:当应用程序进入后台时,计时器将无法正常运行。
(取决于运行循环的可用性和您的超时)

根据我从您的代码中收集的信息,似乎您希望在后台运行该应用程序时更新位置。为此,您应该从此处查看准则:
https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW24


  有几种方法可以在后台跟踪用户的位置,
  其中一些实际上并不涉及定期运行
  背景:
  
  
  应用程序可以注册以进行重大位置更改。
  (推荐)重大更改位置服务可提供
  低功耗接收位置数据的方式,强烈建议用于
  不需要高精度位置数据的应用程序。有了这个
  服务,仅当用户的位置信息产生位置更新
  变化很大;因此,它非常适合社交应用程序或
  向用户提供与位置无关的非关键的应用程序
  信息。如果在更新发生时应用程序被暂停,
  系统会在后台将其唤醒以处理更新。如果
  应用程序启动此服务,然后终止,系统
  当新位置成为新位置时,将自动重新启动应用程序
  可用。此服务仅在iOS 4和更高版本中可用
  包含蜂窝无线电的设备。
  应用程序可以继续
  使用标准的位置服务。虽然不适合跑步
  在后台无限期地,标准位置服务是
  适用于所有版本的iOS,并在更新时提供常规更新
  该应用程序正在运行,包括在后台运行。
  但是,一旦应用程序被挂起或
  已终止,并且新的位置更新不会导致应用
  被唤醒或重新启动。此类服务适用于以下情况
  位置数据主要在应用程序位于
  前景。
  应用程序可以声明自己需要连续
  后台位置更新。需要常规的应用程序
  位置更新(包括前台和后台)均应添加
  将UIBackgroundModes密钥设置为其Info.plist文件,并设置
  此键指向包含位置字符串的数组。这个选项是
  适用于提供特定服务的应用程序,例如
  导航服务,涉及使用户了解其或
  一直在她的位置。钥匙在
  应用程序的Info.plist文件告诉系统应允许
  该应用程序将在后台按需运行。
  
  
  鼓励你
  使用重要的位置更改服务或使用标准
  服务谨慎。定位服务需要积极使用iOS
  设备的车载无线电硬件。持续运行此硬件
  会消耗大量电量。如果您的应用程序确实
  不需要向用户提供准确且连续的位置信息
  用户,最好使用那些将功耗降到最低的服务
  消费。这些低功耗服务中最重要的是
  iOS 4中引入的位置更改服务。此服务提供
  定期更新位置,甚至可以唤醒背景
  应用程序,或重新启动终止的应用程序以交付它们。
  
  对于需要定期更精确的位置数据的应用
  间隔,例如导航应用程序,则需要声明
  应用程序作为连续的后台应用程序。这个选项是
  可用于真正需要它的应用程序,但这是最少的
  理想的选择,因为它会大大增加功耗。

10-07 19:55
查看更多