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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論