2013-07-31 145 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