iOS斷點(diǎn)續(xù)傳實(shí)現(xiàn)方案

在我們?nèi)粘i_發(fā)的過程中帽哑,我們的項(xiàng)目中可能都會(huì)遇到一個(gè)需求就是去下載一個(gè)文件供置,然后將文件保存到本地柳爽,但是在下載的過程中一定是異步的进鸠,也就是說我們可能會(huì)有其它的操作稠曼,這個(gè)時(shí)候可能我們的程序會(huì)遇到一些意外造成閃退的問題亦或是用戶在下載中用戶就退出了程序,如果用戶下次進(jìn)入程序的時(shí)候就需要重新進(jìn)行下載那么一定會(huì)造成極差的用戶體驗(yàn)堤如,所以我們一定需要知道用戶下載的進(jìn)度蒲列。

最近我們的項(xiàng)目中就在做相關(guān)的問題窒朋,官方文檔上NSUrlSessionDownloadTask章節(jié)中沒有找到我想要的方案搀罢,于是我百度了一下相關(guān)的答案,找到的一個(gè)稍微有點(diǎn)用的方案竟然是創(chuàng)建一個(gè)輪詢的timer侥猩,間隔一段時(shí)間在異步線程中將程序暫停獲取到數(shù)據(jù)后存儲(chǔ)到本地榔至,這樣就能保證用戶最多只是小部分?jǐn)?shù)據(jù)的丟失,但是在我看來這樣的方案一定是極差的欺劳。因?yàn)槊看螘和N募霓D(zhuǎn)移都需要花費(fèi)大量的時(shí)間唧取,然后再去resume下載任務(wù)肯定不合理。我就去嘗試了一下愛奇藝的電影的下載划提,我發(fā)現(xiàn)愛奇藝可以做到后臺(tái)看到的下載進(jìn)度枫弟,在后臺(tái)殺死后,再開啟從上次進(jìn)度繼續(xù)下載鹏往,于是我就很好奇他們的實(shí)現(xiàn)方案淡诗。

當(dāng)時(shí)我想到一種方案是利用Application中- (void)applicationWillTerminate:(UIApplication*)application通知,在每次程序?qū)⒁粴⑺赖臅r(shí)候如果有正在下載的任務(wù)將之暫停然后進(jìn)行下載伊履,為此我專門去看了對(duì)應(yīng)的官方文檔韩容,在這個(gè)方法中我們可以做一些數(shù)據(jù)釋放和數(shù)據(jù)保存相關(guān)的操作而且有將近5秒的操作時(shí)間,其實(shí)這個(gè)時(shí)候還是一個(gè)問題就是文檔上說如果用戶是在后臺(tái)殺死程序的話這個(gè)方法一樣是不會(huì)被調(diào)用的唐瀑,雖然有這樣的問題群凶,但是我還是想嘗試一下單純從前臺(tái)是不是能夠?qū)崿F(xiàn)。我起初只是寫了一個(gè)簡單的異步線程哄辣,但是發(fā)現(xiàn)內(nèi)部的打印不會(huì)執(zhí)行请梢,所以我就用了下邊的方案進(jìn)行測試,發(fā)現(xiàn)我的打印被執(zhí)行了力穗。我想也許我找到了一種解決方案溢陪。代碼如下

但是當(dāng)我在項(xiàng)目中加入這個(gè)通知的時(shí)候我發(fā)現(xiàn)這個(gè)時(shí)候是無法執(zhí)行到的,代碼大致如下

也許是系統(tǒng)默認(rèn)就將我的這個(gè)線程殺死不在讓我繼續(xù)去執(zhí)行了睛廊,所以顯然這樣的方案就行不通了形真,我后來嘗試了一些其它的方案都沒有什么效果。也漸漸的理解了在百度上為什么能夠搜到那樣的解決方案,而且Google也沒有找到很好地方案咆霜。但是在我一次次失敗的過程中邓馒,我發(fā)現(xiàn)一件好玩的事情,就是如果我們每次系統(tǒng)手動(dòng)殺死程序蛾坯,下次進(jìn)入程序的時(shí)候我們都會(huì)執(zhí)行NSURLSessionTaskDelegate中的一個(gè)代理方法光酣,代碼如下。

后續(xù)的開發(fā)過程中我格外的關(guān)注這個(gè)方法脉课,我發(fā)現(xiàn)無論是我們下載過程中發(fā)生錯(cuò)誤還是我們?cè)谙螺d過程中出現(xiàn)網(wǎng)絡(luò)中斷等情況都會(huì)走這個(gè)代理方法救军。我想也許這就是說蘋果留個(gè)開發(fā)者解決這一類問題的入口,于是我打印其中的錯(cuò)誤信息大致如下

這個(gè)時(shí)候我打印一下每次暫停的時(shí)候倘零,系統(tǒng)給我們返回的相關(guān)的數(shù)據(jù)唱遭,系統(tǒng)返回?cái)?shù)據(jù)如下

通過上邊的數(shù)據(jù),我開始有一個(gè)大膽的猜測呈驶,我可以使用錯(cuò)誤中的error進(jìn)行繼續(xù)下載拷泽,然后我嘗試著用error的userinfo中的resumeData去繼續(xù)下載,發(fā)現(xiàn)這樣的方案完全能夠?qū)崿F(xiàn)我的想法袖瞻。

通過上邊的嘗試司致,我發(fā)現(xiàn)雖然在文檔上我沒有找到斷點(diǎn)續(xù)傳如何實(shí)現(xiàn),但是其實(shí)系統(tǒng)是幫我實(shí)現(xiàn)好了的聋迎。我們?nèi)绻螺d中斷脂矫,在下一次進(jìn)入的時(shí)候,系統(tǒng)會(huì)告訴我們中斷的位置霉晕,而不需要做復(fù)雜的存儲(chǔ)過程庭再。這樣我們就完成了一次斷點(diǎn)續(xù)傳。

為本文寫了一個(gè)簡單的demo:下載地址

如對(duì)本文有任何疑問娄昆,煩請(qǐng)留言區(qū)提出佩微,看到馬上都會(huì)回復(fù)。如果本文中有任何錯(cuò)誤萌焰,請(qǐng)您指正哺眯,我會(huì)馬上進(jìn)行更改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扒俯,一起剝皮案震驚了整個(gè)濱河市奶卓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撼玄,老刑警劉巖夺姑,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異掌猛,居然都是意外死亡盏浙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來废膘,“玉大人竹海,你說我怎么就攤上這事∝せ疲” “怎么了斋配?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灌闺。 經(jīng)常有香客問我艰争,道長,這世上最難降的妖魔是什么桂对? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任甩卓,我火速辦了婚禮,結(jié)果婚禮上接校,老公的妹妹穿的比我還像新娘猛频。我一直安慰自己狮崩,他們只是感情好蛛勉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睦柴,像睡著了一般诽凌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坦敌,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天侣诵,我揣著相機(jī)與錄音,去河邊找鬼狱窘。 笑死杜顺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蘸炸。 我是一名探鬼主播躬络,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼搭儒!你這毒婦竟也來了穷当?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤淹禾,失蹤者是張志新(化名)和其女友劉穎馁菜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铃岔,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汪疮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片智嚷。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躲胳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纤勒,到底是詐尸還是另有隱情坯苹,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布摇天,位于F島的核電站粹湃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏泉坐。R本人自食惡果不足惜为鳄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腕让。 院中可真熱鬧孤钦,春花似錦、人聲如沸纯丸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽觉鼻。三九已至俊扭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坠陈,已是汗流浹背萨惑。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仇矾,地道東北人庸蔼。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像贮匕,于是被迫代替她去往敵國和親姐仅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容