美文网首页
Alamofire - 后台下载

Alamofire - 后台下载

作者: Janek_m | 来源:发表于2019-08-18 22:59 被阅读0次

上一篇有略讲URLSession处理后台下载 Alamofire(一)

这一篇来研究下Alamofire - 后台下载

configuration - init 源码
commonInit - 源码
接下来进入正题
//封装了一层单例 - 后台下载管理类(在GitHub上查找的资料某位大神提供)
struct LGBackgroundManger {
    
    static let shared = LGBackgroundManger()
    
    let manager: SessionManager = {
        let configuration = URLSessionConfiguration.background(withIdentifier: "com.lgcooci.AlamofireTest.demo")
        configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
//        configuration.timeoutIntervalForRequest = 10
//        configuration.timeoutIntervalForResource = 10
//        configuration.sharedContainerIdentifier = "group.com.lgcooci.AlamofireTest"
        
        return SessionManager(configuration: configuration)
    }()
}

        // 链式请求 -- 本质调用函数方法的时候不断的返回对象、这个对象又可以不断调用下层函数方法 
        LGBackgroundManger.shared.manager
            .download(self.urlDownloadStr1) { (url, response) -> (destinationURL: URL, options: DownloadRequest.DownloadOptions) in
                let documentUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
                let fileUrl     = documentUrl?.appendingPathComponent(response.suggestedFilename!)
                //返回元祖
                return (fileUrl!,[.removePreviousFile,.createIntermediateDirectories])
            }
            .response { (downloadResponse) in
                print("下载回调信息: \(downloadResponse)")
            }
            .downloadProgress { (progress) in
                print("下载进度 : \(progress)")
            }

// 后台进行载完成 -- 进行刷新主线程【AppDelegate】
    func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
        print("hello - \(identifier)")
       LGBackgroundManger.shared.manager.backgroundCompletionHandler = completionHandler
    }

为什么要做成单例,URLSession的时候不是挺好的?

  • 如果你是SessionManager.defalut 显然是不可以的!毕竟要求后台下载,那么我们的会话session的配置
  • URLSessionConfiguration是要求background模式的
    如果你配置出来不做成单例,或者不被持有!在进入后台就会释放,网络也就会报错:Error Domain=NSURLErrorDomain Code=-999 "cancelled"
  • 应用层与网络层也可以达到分离。
  • 能够帮助在AppDelegate 的回调方便直接接收

相关文章

  • Alamofire ——后台下载

    我们先从基本的URLSession后台下载入手,对比看下Alamofire的后台下载 URLSession后台下载...

  • Alamofire(三)-- 后台下载

    这次我们来讲一讲Alamofire的后台下载,实际项目中,也有很多时候需要使用到后台下载的需求。Alamofire...

  • Alamofire - 后台下载

    上一篇有略讲URLSession处理后台下载 Alamofire(一) 这一篇来研究下Alamofire - 后台...

  • Alamofire后台下载

    最近在使用Alamofire 后台下载时遇到一个问题, 正在下载任务的程序退出到后台再回到前台UI没有刷新. 为了...

  • Alamofire实现后台下载

    咔咔咔,敲完一个Alamofire的下载实现: 切到后台时,下载不继续执行,切回后,下载继续执行,后台下载的目的没...

  • Alamofire(一)后台下载基本使用及原理解析

    前言 这篇文章主要是分析后台下载,通过先写URLSession的后台下载,然后使用Alamofire这两种不同的情...

  • Alamofire之后台下载

    后台下载的一般代码写法如下: 一步步分析,首先查看SessionManager.default到底做了什么: co...

  • Alamofire-后台下载

    系统后台下载 config三种模式defaultephemeral本文主角background 使用分片下载 官方...

  • Alamofire-后台下载

    这一篇主要讲解后台下载,后台下载对于应用程序来说,是一个非常重要也比较好用的功能。虽然用好后台下载的确能够大大提升...

  • Alamofire-后台下载

    上一篇文章提到了后台下载,下面看看在Alamofire中是如何处理后台下载的。首先使用原生写法来实现一个后台下载任...

网友评论

      本文标题:Alamofire - 后台下载

      本文链接:https://www.haomeiwen.com/subject/ijjrsctx.html