iOS8后臺運行方案總結(jié)_第1頁
iOS8后臺運行方案總結(jié)_第2頁
iOS8后臺運行方案總結(jié)_第3頁
iOS8后臺運行方案總結(jié)_第4頁
iOS8后臺運行方案總結(jié)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、iOS 8.0后臺任務(wù)長期運行方案后臺運行方案實現(xiàn)方式為:BackgroundRunner+NSURLSession1. 配置2. 在AppDelegate中property (assign, nonatomic) BOOL isBackground; /判讀是否是后臺運行-(void)applicationDidEnterBackground:(UIApplication *)applicationBackgroundRunner shared run;self.isBackground = yes;/在回到界面后關(guān)閉后臺運行-(void)applicationWillEnterForegr

2、ound:(UIApplication *)application BackgroundRunner shared stop;self.isBackground = NO;3. 手機(jī)密碼鎖開啟后的文件保護(hù)問題設(shè)置/設(shè)置常量#define UrlsessionDownload "/com.apple.nsurlsessiond/Downloads/"#define BundleIdentifier NSBundle mainBundle bundleIdentifier/打開uisesion目錄的文件保護(hù)設(shè)置為無/創(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è)置文件為無權(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寫好后,下面就可以使用這個session了,每個應(yīng)用上傳接口都不一樣,但是最終會調(diào)用上傳,我這里的

12、方式是上傳的信息全部在NSMutableURLRequest中,NSMutableURLRequest就大概說下NSMutableURLRequest *request=NSMutableURLRequest requestWithURL:s_url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:CONNECT_TIMEOUT; request setHTTPBody:data; request setHTTPMethod:"PUT"s_url:上傳的接口url,如CONNECT_T

13、IMEOUT:超時時間,如:60data:將要上傳的nsdata數(shù)據(jù)上傳完成后回調(diào)方法:-(void)requestUploadFinishDictionary:(NSDictionary *)dictionary/處理邏輯5.很多上傳邏輯中并不是僅僅包含上傳文件的業(yè)務(wù),也有很多普通的網(wǎng)絡(luò)請求,我們來說說如何把普通的網(wǎng)絡(luò)請求也和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)路請求的session寫好后就是調(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論