【问题标题】:Start thread when iOS application enters background stateiOS 应用程序进入后台状态时启动线程
【发布时间】:2013-02-16 22:43:58
【问题描述】:

我有一个要求,我需要在应用程序进入后台状态时创建和启动一个线程。 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];
    }
    

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

【问题讨论】:

    标签: nsthread ios objective-c nsthread application-state


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢丹尼尔,你能解释一下吗?你能给我一个代码sn-p吗?
    • @SunilHavnur 您需要在调度长时间运行的任务之前从applicationDidEnterBackground: 方法调用beginBackgroundTaskWithExpirationHandler:。请参阅我链接到的文章中的清单 3-3。
    猜你喜欢
    • 2018-04-19
    • 2011-03-10
    • 2011-05-23
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多