2013-07-31 116 views
2

我想使用基于soap的web服务运行图像上传,并在我的应用程序中面对2个关键问题。使用基于soap的web服务将多个图像上传到服务器

问题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; 

      }); 
      } 
      } 

回答

0

1)

苹果非常关心的iPhone和iPad的电池寿命,所以他们是非常严格的关于什么可以在后台运行(也就是说,不是太多)。

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

您需要想出一种方法,通过后台线程上传图片,而您的应用处于前景。这意味着只有当您的应用对用户可见时,才能上传图片。

More information can be found in this closely related question

2)

对于你的第二个问题,这是很清楚,你没有正确释放(或设置为“nil”或重置),其在上传多张图片的过程中所使用的一些变量,这些变量这就是为什么你看到内存使用增加和增加,并最终杀死你的应用程序

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

+0

感谢您的帮助。 – Anjan