iOS应用程序进入后台状态时启动线程

时间:2013-03-02 12:38:50

标签: ios objective-c nsthread application-state

我有一个要求,当应用程序进入后台状态时,我需要创建并启动一个线程。 Created Thread的功能是从本地DB获取数据并上传到服务器,我不需要在UI上进行任何更新。我的问题是:

  1. 我应该在applicationWillResignActive方法还是applicationDidEnterBackground中创建线程?
  2. 哪种方式最好的创建线程 - 方式或GCD或Posix方式?
  3. 我尝试过的事情

    1. 我已经在Android上工作,所以我知道如何实现这个场景,但我是iOS的新手,所以我开始时有点困惑。
    2. 我刚试过NSThread概念,但它没有用。以下是我所知的代码:

      - (void)applicationWillResignActive:(UIApplication *)application {
           [NSThread detachNewThreadSelector:@selector(FetchReportFromDBAndUpload) toTarget:self withObject:nil];
      }
      
      - (void)FetchReportFromDBAndUpload {
           NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
           //Check for internet connection and fetch data from DB and upload to server
           [pool release];
      }
      
    3. 这是创建线程的正确方法,还是需要进行一些更改?如果没有,请指导我如何实现这一目标。提前致谢

1 个答案:

答案 0 :(得分:1)

您必须从AppDelegate的beginBackgroundTaskWithExpirationHandler:方法调用UIApplication类的applicationDidEnterBackground:方法。此方法将您的任务标记为后台任务,以便系统在应用程序进入后台状态时不会将其终止。 (请注意,与VoiceIP,播放音乐,GPS跟踪无关的后台任务仍然限制在或多或少10分钟的后台执行时间,即它们不会永远运行。)

以下是更详细的信息和代码示例:http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html