ios - تحميل العديد من الملفات(الصور والفيديو) في الخلفية مع ترتيب الأولوية




swift background (2)

إلقاء نظرة على توردونلوادماناجر . ويستخدم NSURLSessionDownloadTask ويدعم أيضا وسائط الخلفية.

ما عليك القيام به هو:

1. تعيين HTTPMaximumConnectionsPerHost إلى 1 للتأكد من أن تحميل يحدث تسلسلي:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.timeoutIntervalForRequest = 30.0;
configuration.HTTPMaximumConnectionsPerHost = 1; // Note this

2. وفيما يلي الطريقة التي تكررت ل حلقة وتحميل وسائل الإعلام واحدا تلو الآخر:

-(void)downloadDocuments
{
    for(int i=0; i<[arrDownloadList count]; i++)
    {
        Downloads *download = [arrDownloadList objectAtIndex:i];
        NSString *fileURL = download.documentURL;

        [[TWRDownloadManager sharedManager] downloadFileForURL:fileURL 
                                                      withName:[fileURL lastPathComponent] 
                                              inDirectoryNamed:kPATH_DOC_DIR_CACHE_DOCUMENTS
                                               completionBlock:^(BOOL completed)
         {
             if (completed) 
             {
                 /* To some task like database download flag updation or whatever you wanr */

                 downloadIndex++;

                 if(downloadIndex < [arrDownloadList count]) {
                     [self updateDownloadingStatus];
                 }
                 else {
                     [self allDownloadCompletedWithStatus:TRUE];
                 }
             }

             else
             {
                 /* Cancel the download */
                 [[TWRDownloadManager sharedManager] cancelDownloadForUrl:fileURL];

                 downloadIndex++;

                 if(downloadIndex < [arrDownloadList count]) {
                     [self updateDownloadingStatus];
                 }
                 else {
                     [self allDownloadCompletedWithStatus:TRUE];
                 }
             }

         } enableBackgroundMode:YES];
    }
}

لا تنسى لتمكين وضع الخلفية: enableBackgroundMode:YES

3. تمكين Background Modes في كسكودي:

4. إضافة الطريقة التالية إلى AppDelegate الخاص بك:

- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler{
    [TWRDownloadManager sharedManager].backgroundTransferCompletionHandler = completionHandler;   
}

إذا قمت بذلك، سوف يحدث تحميل متسلسل وسوف تستمر حتى لو كان التطبيق في الخلفية أو المستخدم أقفال الجهاز.

يرجى إضافة تعليق في حالة وجود أي سؤال أو مساعدة بخصوص هذا.

في بداية الأولى من التطبيق أريد تحميل جميع الملفات من الخادم وأريد أن تستمر في تحميل حتى عندما يترك المستخدم التطبيق (انها ليست في المقدمة). الملفات التي تحتاج إلى تحميل هي الصور المصغرة والصور في الحجم الأصلي، وغيرها من الملفات والفيديو. أريد تحميلها من أجل كما كتبت من قبل.

أنا أستخدم ألاموفير وقمت بتعيين مدير الجلسة:

let backgroundManager: Alamofire.SessionManager = {
    let bundleIdentifier = "com....."
    return Alamofire.SessionManager(
      configuration: URLSessionConfiguration.background(withIdentifier: bundleIdentifier + ".background")
    )
  }()

ثم أنا استخدامه مثل هذا:

  self.backgroundManager.download(fileUrl, to: destination)
    .downloadProgress { progress in
      //print("Download Progress: \(progress.fractionCompleted)")
    }
    .response(completionHandler: result)

انها في طريقة تحميل التحميل وأنا أسميها:

for item in items {
      self.downloadPhoto(item: item, isThumbnail: true, shouldReloadData: false, indexPath: nil)
      self.downloadPhoto(item: item, isThumbnail: false, shouldReloadData: false, indexPath: nil)
}

ثم يمكنني إضافة دعوة لتحميل ملف وتحميل الفيديو وغيرها. ولكن كل هذه الطلبات لها نفس الأولوية وأود أن تحميل الصور المصغرة أولا (لأن هذا ما يرى المستخدم في البداية) ثم الصور بالحجم الكامل وبعد تحميل جميع الصور ثم الملفات وأشرطة الفيديو. ولكن يجب أن يكون كل في طابور لأنه إذا كان المستخدم يبدأ التطبيق ومن ثم تعيينه إلى الخلفية وتركها لعدة ساعات كل يجب أن يتم تحميلها. هل هذا ممكن؟ وكيف يمكنني القيام بذلك؟

كنت أبحث في ألاموفير أن لديها مكتبة مكون ألاموفريماج التي لديها الأولوية تحميل تحميل ولكن الصور هي مجرد جزء من الملفات التي أريد أن تعطي الأولوية. شكرا للمساعدة


وأعتقد أن دائرة الرقابة الداخلية القياسية URLSessionDownloadTask سوف تساعدك. لديها priority الملكية، والتي تبدو وكأنك تحتاج.

هنا الوثائق الرسمية

هنا هو بعض البرنامج التعليمي