【问题标题】:multiple image uploading to server using soap based web service使用基于肥皂的网络服务将多个图像上传到服务器
【发布时间】:2013-07-31 09:46:44
【问题描述】:

我正在尝试使用基于肥皂的 Web 服务运行图像上传,并且这样做我在我的应用程序中面临 2 个关键问题。

问题 1:- 当应用程序将多个图像上传到服务器时,如果我的应用程序进入后台状态,那么我将停止执行 (application suspended state) .当我的应用程序从后台返回到前台状态时,它会再次恢复我的后台线程。

问题 2:- 当我尝试从设备库在服务器上上传 160-170 张图像时。在服务器上上传 60-70 张图像后,我收到内存警告。我处理该方法并尝试在应用程序中释放一些内存,然后我再次启动我的线程,当时我的应用程序崩溃了。 //->> 对于第二期,我添加了 3 个不同的 Web 服务及其太长的代码,所以我不打算在这里分享。当我检查仪器时,它通常以最大 2 到 2.5 MB 的实时字节运行,但是当我上传线程时,它会逐渐增加,并且在某个选择点我收到了内存警告。我的代码包含 ARC 的功能,但我仍然遇到内存警告问题。

问题 1 的代码:-

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

          UIDevice* device = [UIDevice currentDevice];
          BOOL backgroundSupported = NO;
          if ([device respondsToSelector:@selector(isMultitaskingSupported)])
              {
               backgroundSupported = device.multitaskingSupported;
          }
        //NSLog(@"backgroundSupported: %d", backgroundSupported);
         if (backgroundSupported)
         {

        _IsBackground = TRUE;

        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),
                ^{
                 while (_IsBackground)
                    {

                         //// it contineous run my application within this state.

                    }
                    NSLog(@"Background loop ended");

            [app endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;

            });
            }
           }

【问题讨论】:

    标签: iphone ios objective-c ipad


    【解决方案1】:

    1)

    Apple 非常关心 iPhone 和 iPad 的电池寿命,因此他们对可以在后台运行的内容非常严格(也就是说,不能太多)。

    使用当前发布的 iOS 版本,当您的应用程序收到对“applicationDidEnterBackground:”委托方法的调用时,您只有大约 5 秒的时间来清理或正确挂起。

    您需要想出一种方法来通过后台线程上传图像而您的应用程序在前台。这意味着您可以上传图片的唯一时间是您的应用对用户可见。

    More information can be found in this closely related question.

    2)

    对于您的第二个问题,很明显您没有正确释放(或设置为“nil”,或重置)在上传多个图像的过程中正在使用的一些变量,这就是您看到内存的原因使用量不断增加,最终会杀死您的应用。

    您已经了解 Instruments,但听起来您需要更加熟悉 tracking down memory usage 以及内存中的哪些内容占用越来越多的空间。

    【讨论】:

    • 感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2021-07-29
    • 2017-01-16
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多