




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、iOS 8.0后臺(tái)任務(wù)長(zhǎng)期運(yùn)行方案后臺(tái)運(yùn)行方案實(shí)現(xiàn)方式為:BackgroundRunner+NSURLSession1. 配置2. 在AppDelegate中property (assign, nonatomic) BOOL isBackground; /判讀是否是后臺(tái)運(yùn)行-(void)applicationDidEnterBackground:(UIApplication *)applicationBackgroundRunner shared run;self.isBackground = yes;/在回到界面后關(guān)閉后臺(tái)運(yùn)行-(void)applicationWillEnterForegr
2、ound:(UIApplication *)application BackgroundRunner shared stop;self.isBackground = NO;3. 手機(jī)密碼鎖開(kāi)啟后的文件保護(hù)問(wèn)題設(shè)置/設(shè)置常量#define UrlsessionDownload "/com.apple.nsurlsessiond/Downloads/"#define BundleIdentifier NSBundle mainBundle bundleIdentifier/打開(kāi)uisesion目錄的文件保護(hù)設(shè)置為無(wú)/創(chuàng)建可使用的urlseseion路徑-(void)create
3、UrlSession NSString *theFMCachePath=nil; NSArray *pathes = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); theFMCachePath = pathes objectAtIndex:0; theFMCachePath = theFMCachePath stringByAppendingString:UrlsessionDownload; theFMCachePath = theFMCachePath stringByAppen
4、dingString:NSString stringWithFormat:"%/",BundleIdentifier; NSFileManager *fileManager = NSFileManager defaultManager; if(!fileManager isExecutableFileAtPath:theFMCachePath)/設(shè)置文件為無(wú)權(quán)限保護(hù) NSDictionary *attributes = NSDictionary dictionaryWithObject:NSFileProtectionNone forKey:NSFileProtection
5、Key; fileManager createDirectoryAtPath:theFMCachePath withIntermediateDirectories:YES attributes:attributes error:nil; 4上傳sessioin的代碼,(UploadSessionBackgound.h, UploadSessionBackgound.m)/UploadSessionBackgound.h#import <Foundation/Foundation.h>protocol UploadSessionBackgoundDelegate <NSObje
6、ct>-(void)requestUploadFinishDictionary:(NSDictionary *)dictionary;endinterface UploadSessionBackgound : NSObject<NSURLSessionDataDelegate>property(nonatomic, strong) NSURLSession *urlSession;property(nonatomic, strong) NSURLSessionUploadTask *sesssionDataTask;property(nonatomic, weak) id&l
7、t;UploadSessionBackgoundDelegate> sessioinDelegate;-(void)startBackground:(NSMutableURLRequest *)request;-(void)stopUploadBackground;end/UploadSessionBackgound.m#import "UploadSessionBackgound.h"implementation UploadSessionBackgoundsynthesize urlSession,sesssionDataTask,sessioinDelegate
8、;-(NSURLSession *)urlSession static NSURLSession *session; static dispatch_once_t onceToken; dispatch_once(&onceToken, NSURLSessionConfiguration *backgroundConfigObject = NSURLSessionConfiguration backgroundSessionConfiguration: "com.zhouhe.Edunbao.UploadSessionBackgound" session = NSU
9、RLSession sessionWithConfiguration:backgroundConfigObject delegate:self delegateQueue:nil; ); return session;-(void)startBackground:(NSMutableURLRequest *)request self.sesssionDataTask = self.urlSession uploadTaskWithStreamedRequest:request; self.sesssionDataTask resume;-(void)stopUploadBackground s
10、elf.sesssionDataTask cancel;- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data; if(data=nil) self.sessioinDelegate requestUploadFinishDictionary:nil; return; NSDictionary *dict = NSJSONSerialization JSONObjectWithData:data options:0 err
11、or:nil; NSLog("dict:%",dict); self.sessioinDelegate requestUploadFinishDictionary:dict;- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error self.sessioinDelegate requestUploadFinishDictionary:nil;end上傳session寫(xiě)好后,下面就可以使用這個(gè)session了,每個(gè)應(yīng)用上傳接口都不一樣,但是最終會(huì)調(diào)用上傳,我這里的
12、方式是上傳的信息全部在NSMutableURLRequest中,NSMutableURLRequest就大概說(shuō)下NSMutableURLRequest *request=NSMutableURLRequest requestWithURL:s_url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:CONNECT_TIMEOUT; request setHTTPBody:data; request setHTTPMethod:"PUT"s_url:上傳的接口url,如CONNECT_T
13、IMEOUT:超時(shí)時(shí)間,如:60data:將要上傳的nsdata數(shù)據(jù)上傳完成后回調(diào)方法:-(void)requestUploadFinishDictionary:(NSDictionary *)dictionary/處理邏輯5.很多上傳邏輯中并不是僅僅包含上傳文件的業(yè)務(wù),也有很多普通的網(wǎng)絡(luò)請(qǐng)求,我們來(lái)說(shuō)說(shuō)如何把普通的網(wǎng)絡(luò)請(qǐng)求也和urlsession方式處理,(SeesionConnection.h, SeesionConnection.m)/ SeesionConnection.h#import <Foundation/Foundation.h>protocol SeesionCo
14、nnectionDelegate <NSObject>-(void)requestSeesionConnectionDictionary:(NSDictionary *)dictionary;endinterface SeesionConnection : NSObjectproperty(nonatomic, strong) NSURLSession *urlSession;property(nonatomic, strong) NSURLSessionDownloadTask *sesssionDataTask;property(nonatomic, weak) id<S
15、eesionConnectionDelegate> sessioinDelegate;-(void)startBackground:(NSMutableURLRequest *)request;-(void)stopDownBackground;end/ SeesionConnection.m#import "SeesionConnection.h"implementation SeesionConnectionsynthesize urlSession,sesssionDataTask,sessioinDelegate;-(NSURLSession *)urlSes
16、sion static NSURLSession *session; static dispatch_once_t onceToken; dispatch_once(&onceToken, NSURLSessionConfiguration *backgroundConfigObject = NSURLSessionConfiguration backgroundSessionConfiguration: "com.zhouhe.Edunbao.SeesionConnection" session = NSURLSession sessionWithConfigur
17、ation:backgroundConfigObject delegate:self delegateQueue:nil; ); return session;-(void)startBackground:(NSMutableURLRequest *)request self.sesssionDataTask = self.urlSession downloadTaskWithRequest:request; self.sesssionDataTask resume;-(void)stopDownBackground self.sesssionDataTask cancel;- (void)U
18、RLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location NSFileManager *fileManager = NSFileManager defaultManager; NSData *data = NSData dataWithContentsOfURL:location; if(data=nil) self.sessioinDelegate requestSeesionConnec
19、tionDictionary:nil; NSError *error; fileManager removeItemAtURL:location error:&error; NSLog("error:%",error); return; NSDictionary *dict = NSJSONSerialization JSONObjectWithData:data options:0 error:nil; NSLog("dict:%",dict); self.sessioinDelegate requestSeesionConnectionDic
20、tionary:dict; NSError *error; fileManager removeItemAtURL:location error:&error; NSLog("error:%",error);- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error self.sessioinDelegate requestSeesionConnectionDictionary:nil;end網(wǎng)路請(qǐng)求的session寫(xiě)好后就是調(diào)用了SessionVerif
21、yBackground *sessioinVerifyBackground = SessionVerifyBackground alloc init; sessioinVerifyBackground setSessioinDelegate:self; sessioinVerifyBackground startBackground:request;request:自己去創(chuàng)建吧,NSMutableURLRequest類,-(void)requestSeesionConnectionDictionary:(NSDictionary *)dictionary/這里處理邏輯6.下載session的代
22、碼(DownSessionBackground.h, DownSessionBackground.m)/ DownSessionBackground.h#import <Foundation/Foundation.h>interface DownSessionBackground : NSObject<NSURLSessionDownloadDelegate>property(nonatomic, assign) BOOL isBackGround;property(nonatomic, strong, readonly) NSURLSession *urlSessio
23、n;property(nonatomic, strong) NSURLSessionDownloadTask *downloadTask;-(id)init;-(void)startDownBackground;-(void)stopDownBackground;end/ DownSessionBackground.m#import "DownSessionBackground.h"implementation DownSessionBackgroundsynthesize isBackGround,urlSession,downloadTask;-(id)init sta
24、tic DownSessionBackground *background; static dispatch_once_t onceToken; dispatch_once(&onceToken, background = super init; ); return background;-(NSURLSession *)urlSession static NSURLSession *backgroundSession = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, NSURLSessionC
25、onfiguration *config = NSURLSessionConfiguration backgroundSessionConfiguration:"com.shinobicontrols.BackgroundDownload.BackgroundSessions" backgroundSession = NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil; ); return backgroundSession;-(void)startDownBackgrou
26、nd if(self.isBackGround) NSString *url = " NSURLRequest *request = NSURLRequest requestWithURL:NSURL URLWithString:url; self.downloadTask = self.urlSession downloadTaskWithRequest:request; / Start the download self.downloadTask resume; -(void)stopDownBackground self.downloadTask cancel;#pragma
27、mark NSURLSessionDelegate- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite double currentProgress = totalBytesWr
28、itten / (double)totalBytesExpectedToWrite; NSString *percentStr = NSNumberFormatter localizedStringFromNumber:NSNumber numberWithDouble:currentProgress numberStyle:NSNumberFormatterPercentStyle; NSLog("當(dāng)前下載%",percentStr);- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSession
29、DownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location NSLog("下載成功"); NSLog("下載的文件路徑:%",location); NSError *error; NSFileManager *fileManager = NSFileManager defaultManager; NSString *documentDir = self getFMCachePath; NSString *destinationFilename = downloadTask
30、.originalRequest.URL.lastPathComponent; NSArray *array=destinationFilename componentsSeparatedByString:"/" NSString *createPath = NSString stringWithFormat:"%",documentDir; self CreatePath:createPath; NSString *savedPath = NSString stringWithFormat:"%/%",createPath,array lastObject; NSURL *destinationURL = NSURL fileURLWithPath:savedPath; if (fileManager fileExistsAtPath:destinatio
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 火災(zāi)應(yīng)急預(yù)案培訓(xùn)制度(3篇)
- 2025年法學(xué)概論考試的知識(shí)掌握方式與試題及答案
- 2025年科技進(jìn)步對(duì)戰(zhàn)略影響試題及答案
- 行政法與社會(huì)資本的關(guān)系探討試題及答案
- 2025年信息技術(shù)應(yīng)用能力試題及答案
- 2025年法學(xué)概論的實(shí)務(wù)考察及試題及答案
- 行政法學(xué)重要時(shí)事考題及答案
- 開(kāi)源軟件項(xiàng)目2025年考試試題及答案
- 2025年網(wǎng)絡(luò)管理資格考核試題及答案
- 2025二手筆記本電腦轉(zhuǎn)讓合同
- 2025年合肥交通投資控股集團(tuán)有限公司第一批次招聘38人筆試參考題庫(kù)附帶答案詳解
- 中國(guó)低空經(jīng)濟(jì)發(fā)展指數(shù)報(bào)告(2025版)
- 禁毒社工考試試題及答案
- 裝卸服務(wù)外包協(xié)議書(shū)范本
- 2025年鄉(xiāng)村振興戰(zhàn)略相關(guān)考試試題及答案
- 2025防撞緩沖車標(biāo)準(zhǔn)
- 廉潔課件教學(xué)課件
- 2024-2025學(xué)年全國(guó)版圖知識(shí)競(jìng)賽(小學(xué)組)考試題庫(kù)(含答案)
- 幼兒園管理 試題及答案
- 江蘇省南京市、鹽城市2025屆高三年級(jí)5月第二次模擬考試英語(yǔ)試題及答案(南京鹽城二模)
- 《公共資源交易法規(guī)概要》課件
評(píng)論
0/150
提交評(píng)論