【问题标题】:Iphone: Does application freeze when run into background?Iphone:应用程序在后台运行时会冻结吗?
【发布时间】:2011-09-28 01:16:57
【问题描述】:

我有一个使用 NSUrlConnection 将文件上传到服务器的应用程序。它被放置在 ViewDidLoad 方法上。它确实在应用程序处于前台时上传到服务器。在异步调用 NSUrlConnection 之前,我在应用程序目录中创建临时文件。

在上传文件时,我点击了 iPhone 按钮,以便应用程序在后台运行。首先,我认为应用程序冻结了上传,但事实并非如此。该文件在此期间仍在上传。

这是否意味着应用程序仍然在后台正常运行,直到剩余时间完成然后应用程序退出?

【问题讨论】:

  • 从 iOS 4 开始,它可以进行多任务处理。它不会退出,它可能会在设备内存不足时被杀死。
  • 这意味着应用程序不会被冻结。那么 beginBackgroundTaskWithExpirationHandler 的 id 是什么,如果应用程序在它处于后台时仍然继续运行。

标签: iphone asynchronous upload background


【解决方案1】:

一旦按下主页按钮,每个应用程序都会在后台运行一段时间(通常是几秒钟),然后才会进入挂起模式。如果您需要在进入暂停模式之前完成任务(在您的案例文件上传),您可以使用Task completion API.

即使您使用的是任务完成 API,您的应用程序也只有一个线程在运行,而不是整个应用程序。这是苹果推荐的代码:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication*    app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task.

        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2023-03-14
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多