0

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

  1. 我应该在哪里创建线程 - 在applicationWillResignActive方法中还是在applicationDidEnterBackground
  2. 哪种是创建线程的最佳方式 - 方式或 GCD 或 Posix 方式?

我尝试过的事情

  1. 我已经在 Android 上工作过,所以我知道如何实现这种情况,但我是 iOS 新手,所以我开始有点困惑。
  2. 我刚刚尝试了 with 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];
    }
    

这是创建线程的正确方法,还是我需要做一些更改?如果没有,请指导我如何实现这一目标。提前致谢

4

1 回答 1

1

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

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

于 2013-03-02T13:08:17.277 回答