亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS實(shí)現(xiàn)后臺(tái)長(zhǎng)時(shí)間運(yùn)行

2019-10-21 18:39:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

一般APP在按下Home鍵被掛起后,這時(shí)APP的 backgroundTimeRemaining 也就是后臺(tái)運(yùn)行時(shí)間大約只有3分鐘,如果在退出APP后,過(guò)十幾二十二分鐘或者更長(zhǎng)時(shí)間再回到APP,APP就會(huì)回到剛打開(kāi)時(shí)的狀態(tài),也就是首頁(yè);有的項(xiàng)目在被掛起后需要在后臺(tái)運(yùn)行一段時(shí)間,使有足夠的時(shí)間來(lái)完成與服務(wù)器對(duì)接的操作,或者需要一直運(yùn)行的需求;如果需要,則在APP被掛起后,申請(qǐng)后臺(tái),來(lái)延長(zhǎng)后臺(tái)運(yùn)行時(shí)間。

APP申請(qǐng)后臺(tái)運(yùn)行的方式有幾種:

播放音樂(lè)

定位

Newsstand downloads

fetch 等;

iOS,后臺(tái),長(zhǎng)時(shí)間運(yùn)行

這里主要說(shuō)下后臺(tái)播放無(wú)聲音樂(lè)(其實(shí)是不播放),采用哪種方式,對(duì)應(yīng)勾選上圖;我的項(xiàng)目中有音頻播放需求,如果沒(méi)有,那就找一個(gè)播放音頻的理由,或者用其他方式實(shí)現(xiàn)。

實(shí)現(xiàn)

這里采用了兩個(gè)單例:電話(huà)監(jiān)控(XKTelManager)、后臺(tái)運(yùn)行(XKBGRunManager),電話(huà)監(jiān)控可以忽略,視情況而用;采用單例是為了方便管理;

XKTelManager.h

#import <Foundation/Foundation.h>@interface XKTelManager : NSObject///是否在后臺(tái)運(yùn)行@property (nonatomic,assign) BOOL inBackgroundRun;+ (XKTelManager *)sharedManager;/** 來(lái)電監(jiān)聽(tīng) */- (void)startMonitor;@end

XKTelManager.m

#import "XKTelManager.h"#import "XKBGRunManager.h"#import <CoreTelephony/CTCallCenter.h>#import <CoreTelephony/CTCall.h>static XKTelManager *_sharedManger;@interface XKTelManager()@property (nonatomic, strong) CTCallCenter *callCenter;@end@implementation XKTelManager+ (XKTelManager *)sharedManager{  static dispatch_once_t onceTelSingle;  dispatch_once(&onceTelSingle, ^{    if (!_sharedManger) {      _sharedManger = [[XKTelManager alloc]init];    }  });  return _sharedManger;}- (instancetype)init{  self = [super init];  if (self) {    _inBackgroundRun = NO;  }  return self;}#pragma mark -********* 監(jiān)聽(tīng)電話(huà)相關(guān)- (void)startMonitor {  __weak typeof(self) weakSelf = self;  _callCenter = [[CTCallCenter alloc] init];  _callCenter.callEventHandler = ^(CTCall * call) {    ///如果已經(jīng)進(jìn)入后臺(tái)了,不做任何操作    if (weakSelf.inBackgroundRun) {      return;    }    ///APP未進(jìn)入后臺(tái)    if ([call.callState isEqualToString:CTCallStateDisconnected]){      NSLog(@"電話(huà) --- 斷開(kāi)連接");      [[XKBGRunManager sharedManager] stopBGRun];    }    else if ([call.callState isEqualToString:CTCallStateConnected]){      NSLog(@"電話(huà) --- 接通");    }    else if ([call.callState isEqualToString:CTCallStateIncoming]){      NSLog(@"電話(huà) --- 待接通");      [[XKBGRunManager sharedManager] startBGRun];    }    else if ([call.callState isEqualToString:CTCallStateDialing]){      NSLog(@"電話(huà) --- 撥號(hào)中");      [[XKBGRunManager sharedManager] startBGRun];    }    else {      NSLog(@"電話(huà) --- 無(wú)操作");    }      };}@end

XKBGRunManager.h

#import <Foundation/Foundation.h>@interface XKBGRunManager : NSObject+ (XKBGRunManager *)sharedManager;/** 開(kāi)啟后臺(tái)運(yùn)行 */- (void)startBGRun;/** 關(guān)閉后臺(tái)運(yùn)行 */- (void)stopBGRun;@end

XKBGRunManager.m

 

#import "XKBGRunManager.h"///循環(huán)時(shí)間static NSInteger _circulaDuration = 60;static XKBGRunManager *_sharedManger;@interface XKBGRunManager()@property (nonatomic,assign) UIBackgroundTaskIdentifier task;///后臺(tái)播放@property (nonatomic,strong) AVAudioPlayer *playerBack;@property (nonatomic, strong) NSTimer *timerAD;///用來(lái)打印測(cè)試@property (nonatomic, strong) NSTimer *timerLog;@property (nonatomic,assign) NSInteger count;@end@implementation XKBGRunManager{  CFRunLoopRef _runloopRef;  dispatch_queue_t _queue;}+ (XKBGRunManager *)sharedManager{  static dispatch_once_t onceRunSingle;  dispatch_once(&onceRunSingle, ^{    if (!_sharedManger) {      _sharedManger = [[XKBGRunManager alloc]init];    }  });  return _sharedManger;}/// 重寫(xiě)init方法,初始化音樂(lè)文件- (instancetype)init {  if (self = [super init]) {    [self setupAudioSession];    _queue = dispatch_queue_create("com.audio.inBackground", NULL);    //靜音文件    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"****" ofType:@"mp3"];    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];    self.playerBack = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];    [self.playerBack prepareToPlay];    // 0.0~1.0,默認(rèn)為1.0    self.playerBack.volume = 0.01;    // 循環(huán)播放    self.playerBack.numberOfLoops = -1;  }  return self;}- (void)setupAudioSession {  // 新建AudioSession會(huì)話(huà)  AVAudioSession *audioSession = [AVAudioSession sharedInstance];  // 設(shè)置后臺(tái)播放  NSError *error = nil;  [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];  if (error) {    NSLog(@"Error setCategory AVAudioSession: %@", error);  }  NSLog(@"%d", audioSession.isOtherAudioPlaying);  NSError *activeSetError = nil;  // 啟動(dòng)AudioSession,如果一個(gè)前臺(tái)app正在播放音頻則可能會(huì)啟動(dòng)失敗  [audioSession setActive:YES error:&activeSetError];  if (activeSetError) {    NSLog(@"Error activating AVAudioSession: %@", activeSetError);  }}/** 啟動(dòng)后臺(tái)運(yùn)行 */- (void)startBGRun{  [self.playerBack play];  [self applyforBackgroundTask];  ///確保兩個(gè)定時(shí)器同時(shí)進(jìn)行  dispatch_async(_queue, ^{    self.timerLog = [[NSTimer alloc] initWithFireDate:[NSDate date] interval:1 target:self selector:@selector(log) userInfo:nil repeats:YES];    self.timerAD = [[NSTimer alloc] initWithFireDate:[NSDate date] interval:_circulaDuration target:self selector:@selector(startAudioPlay) userInfo:nil repeats:YES];    _runloopRef = CFRunLoopGetCurrent();    [[NSRunLoop currentRunLoop] addTimer:self.timerAD forMode:NSDefaultRunLoopMode];    [[NSRunLoop currentRunLoop] addTimer:self.timerLog forMode:NSDefaultRunLoopMode];    CFRunLoopRun();  });}/** 申請(qǐng)后臺(tái) */- (void)applyforBackgroundTask{  _task =[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{    dispatch_async(dispatch_get_main_queue(), ^{      [[UIApplication sharedApplication] endBackgroundTask:_task];      _task = UIBackgroundTaskInvalid;    });  }];}/** 打印 */- (void)log{  _count = _count + 1;  NSLog(@"_count = %ld",_count)}/** 檢測(cè)后臺(tái)運(yùn)行時(shí)間 */- (void)startAudioPlay{  _count = 0;  dispatch_async(dispatch_get_main_queue(), ^{    if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 61.0) {      NSLog(@"后臺(tái)快被殺死了");      [self.playerBack play];      [self applyforBackgroundTask];    }    else{      NSLog(@"后臺(tái)繼續(xù)活躍呢");    }///再次執(zhí)行播放器停止,后臺(tái)一直不會(huì)播放音樂(lè)文件    [self.playerBack stop];  });}/** 停止后臺(tái)運(yùn)行 */- (void)stopBGRun{  if (self.timerAD) {    CFRunLoopStop(_runloopRef);    [self.timerLog invalidate];    self.timerLog = nil;    // 關(guān)閉定時(shí)器即可    [self.timerAD invalidate];    self.timerAD = nil;    [self.playerBack stop];  }  if (_task) {    [[UIApplication sharedApplication] endBackgroundTask:_task];    _task = UIBackgroundTaskInvalid;  }}@end

最后在 AppDelegate.m 對(duì)應(yīng)的方法中,實(shí)現(xiàn)開(kāi)啟和停止后臺(tái)運(yùn)行即可!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
一本大道久久a久久精二百| 欧洲杯什么时候开赛| 精品视频成人| 精品久久毛片| 另类高清dbsm日本tvav| 欧美妇乱xxxxx视频| a屁视频一区二区三区四区| 国产精品午夜在线观看| 你懂的一区二区三区| 欧美日韩亚洲一区二| xxxx黄色| 国内精品400部情侣激情| 天堂网在线.www天堂在线视频| 国产精品区一区二区三区| 日韩av中文字幕在线播放| 欧美一卡2卡三卡4卡5免费| 亚洲性线免费观看视频成熟| 污版视频在线观看| 麻豆国产一区二区| 成人福利免费网站| 成人久久在线| 韩国理伦片一区二区三区在线播放| 中文字幕av一区二区三区| 真实国产乱子伦对白在线| 国产高清精品一区| 亚洲第一综合网| 天堂影院在线| 在线电影av不卡网址| 久久午夜夜伦鲁鲁一区二区| 国产主播一区二区三区| 欧美岛国在线观看| 日本a一级在线免费播放| 国产精品扒开腿做爽爽爽软件| 久久久www成人免费精品| 性久久久久久久久| 原谅我中文字幕| 欧美精品se| 18成人免费观看视频| 亚洲精品日韩欧美| 天堂中文视频在线| 中文字幕线观看| 成人黄18免费网站| 激情久久久久久久| 欧美午夜视频网站| 国产网站欧美日韩免费精品在线观看| 欧美成人视屏| www.性欧美| 欧美日韩大尺度| 乱亲女h秽乱长久久久| 伊人久久综合一区二区| 天堂网站www天堂资源在线| 一级做a爰片性色毛片视频| 国内精品久久久久影院一蜜桃| 成人网站免费观看| 国产精品欧美久久| 97免费高清电视剧观看| 成人综合久久| 九色国产蝌蚪视频| av日韩在线播放| 一区二区三区中文字幕| 亚洲一区二区自拍偷拍| 久草资源站在线观看| 中文精品久久| 国内自拍欧美激情| 久久综合九色综合97婷婷女人| 亚洲欧美成人综合| 另类春色校园亚洲| www.涩涩爱| 黄色av小说在线观看| 一道在线中文一区二区三区| 美女999久久久精品视频| 欧美日韩综合在线| 亚洲天堂一区二区在线观看| 偷拍一区二区三区四区| 中文字幕成人网| 婷婷国产在线| 国产精品美女主播在线观看纯欲| 欧美视频成人| 肥臀熟女一区二区三区| 日韩一级在线播放| 国精产品一区一区三区视频| 亚洲欧洲在线一区| 亚洲一级av无码毛片精品| 高清在线观看日韩| 亚洲欧美日韩国产成人综合一二三区| 丰满人妻妇伦又伦精品国产| 色悠悠亚洲一区二区| 国内精品免费| 久久九九亚洲综合| 亚洲黄色在线免费观看| 中文字幕久久av| 成人au免费视频影院| 人妻妺妺窝人体色www聚色窝| 欧美在线精品一区| 午夜国产一区二区三区| 一区二区电影免费观看| julia一区二区三区中文字幕| 久久久国内精品| 青青草视频在线青草免费观看| av免费在线一区二区三区| 欧美成人激情视频免费观看| 国产午夜久久久| 欧美日韩久久中文字幕| 国产区卡一卡二卡三乱码免费| 奇米777国产一区国产二区| 日本xxxwww免费视频| 国产欧美一区二区三区久久| 人禽交欧美网站免费| 国内久久精品| 国产精品羞羞答答在线| 老女人av在线| 99国产超薄肉色丝袜交足的后果| 日韩视频精品在线| 免费在线黄色网址| 亚洲色图一区二区三区| 午夜免费精品视频| 国产激情第一页| 亚洲 自拍 另类小说综合图区| 337p日本欧洲亚洲大胆张筱雨| 国产精品欧美在线观看| 欧美gay1069大粗吊| 精品国产自在精品国产浪潮| 亚洲午夜精品在线观看| 天堂在线观看一卡二卡三卡四卡| 日韩高清av一区二区三区| 欧美刺激性大交免费视频| 91精品视频观看| 免费黄网在线看| 午夜精品一区二区三区av| 欧美国产专区| 黄色网址视频在线观看| 亚洲黄色免费三级| 欧洲熟妇精品视频| 日韩欧美在线视频免费观看| 高清免费电影在线观看| 中文字幕日本精品| 亚洲美女屁股眼交3| eeuss影院在线观看| 色综合久久九月婷婷色综合| 日本天堂在线| 日本在线播放一二三区| mm131午夜| 久久亚洲电影| 麻豆久久久久久| 中文字幕一区二区三区四区| 久久久久久久亚洲精品| 成人日韩视频| 国产91对白刺激露脸在线观看| 久久人人爽人人爽人人片av高清| 国产对白叫床清晰在线播放| 户外露出精品视频国产| 夜夜操天天干| 偷拍欧美精品| 色偷偷av男人的天堂| 久久韩剧网电视剧| 成人中文字幕视频| 国产精品美女视频网站| 亚洲乱码国产乱码精品精大量| 先锋影音男人av资源| 国产精品自拍视频| 99鲁鲁精品一区二区三区| 中文字幕一区二区三区人妻在线视频| 另类专区欧美| 久久免费少妇高潮久久精品99| 日韩资源在线观看| 男操女视频网站| 欧美日韩视频精品一区二区| 无码国产色欲xxxx视频| 欧美xxx性| 欧美色图亚洲天堂| www.-级毛片线天内射视视| 亚洲天堂av一区二区三区| 欧美超碰在线观看| 欧美一级片一区| 四虎影音在线| 国产成人精品综合久久久| 国产成人啪精品视频免费网| 熟妇人妻av无码一区二区三区| av成人 com a| 制服丝袜国产精品| 亚洲精品不卡在线观看| 自拍av一区二区三区| 国产淫片在线观看| 男男视频在线观看网站| 看全色黄大色大片免费久久久| 少女频道在线观看免费播放电视剧| 国产精品久久久久久免费观看| 国产精品一区二区3区| 欧美高清另类hdvideosexjaⅴ| 中文字幕欧美人妻精品一区| 日本三级视频在线观看| 青青草成人免费在线视频| www.99re7.com| 国产理论在线观看| 国产情侣一区在线| 久久精品久久综合| 久久精品国产68国产精品亚洲| 精品人妻一区二区三区三区四区| 国产视频久久久| 日韩高清av电影| av网站大全在线观看| 极品校花啪啪激情久久| www.色综合| 亚洲欧美日韩成人高清在线一区| 一个人免费观看在线视频www| 97超碰人人干| 国产视频精品网| 中文字幕在线视频一区二区| av在线免费看片| 欧美另类videos| 国产网站在线| wwwww在线观看免费视频| 久久精品国产精品青草色艺| 欧美三级乱码| 欧美一级理论片| 日韩在线一二三区| 欧美自拍偷拍一区| 黄瓜视频在线免费观看| 手机看片日韩av| 少妇久久久久久被弄到高潮| avove在线观看| 成人影院一区二区三区| 久久大香伊蕉在人线观看热2| 日韩精品一区二区三区免费观影| 国产精品永久免费在线| 亚洲 欧美 综合 另类 中字| 欧洲精品久久久久毛片完整版| 在线a人片免费观看视频| 在线观看免费国产小视频| 欧美精品中文字幕一区二区| 粗暴91大变态调教| 欧美高清影院| 福利微拍一区二区| 免费欧美在线| 一区二区三区四区高清视频| 中文字幕亚洲电影| 在线免费成人| 亚洲天堂av图片| 欧美亚洲一区二区在线观看| 免费成人在线看| 蜜桃传媒视频第一区入口在线看| 国产狂喷白浆在线观看视频| 日韩电影大片中文字幕| 91黄色小网站| 色久视频在线播放| 蜜桃传媒一区二区亚洲av| 超碰成人在线免费观看| 99热99在线| jizz一区二区| 99久久精品久久亚洲精品| 久久99精品国产91久久来源| 欧美激情一区二区三区在线视频| 中文字幕无码人妻少妇免费| 欧美猛交ⅹxxx乱大交视频| 一区二区激情| 韩国专线一区二三区| 亚洲人视频在线观看| jizzjizzjizzjizz| 一区二区在线免费观看视频| 亚洲精品在线播放| 国产成人亚洲精品青草天美| cao在线观看| 日韩一区二区在线观看| 日本在线免费中文字幕| www.自拍偷拍| av电影免费在线看| 久久久精品午夜少妇| 91美剧网在线播放| 91精品视频免费| 97se视频在线观看| 色爱区综合激月婷婷| 欧美国产专区| 制服诱惑一区| 久久久噜噜噜久久| 成人白浆超碰人人人人| 午夜久久99| 国产日韩一区二区在线| 久久黄色片视频| 国产乱码精品一区二区三区中文| 污软件在线观看| 欧美色涩在线第一页| 欧美久久久久久久久| 少妇视频在线播放| 香蕉av一区二区| 欧美日韩一区二区免费视频| 91视频免费在观看| 五月婷婷综合激情| 欧美wwwwww| 欧美午夜视频在线| 奇米成人av国产一区二区三区| 天堂8中文在线| 欧美xxxx做受欧美护士| 中文字幕精品在线视频| 日本二区在线观看| 成人自拍偷拍| 久久久成人av| 亚洲欧美日韩中文在线| 国产日韩欧美在线视频观看| 免费观看国产视频在线| 日韩成人免费av| 国产成人精品亚洲男人的天堂| 久久久精品动漫| 国产成人久久婷婷精品流白浆| 久久久精品国产**网站| 在线免费观看a级片| 最近中文av字幕在线中文| 欧美视频在线观看视频| 欧美三级电影精品| 免费一级特黄3大片视频| 宅男午夜在线| 中文字幕一区二区精品| 蜜臀久久99精品久久久| 性猛交富婆╳xxx乱大交天津| 久久www成人_看片免费不卡| 风间由美性色一区二区三区| 制服丝袜中文字幕亚洲| 欧美激情在线一区二区| 色狠狠久久av五月综合|| 亚洲成av人片在线观看www| 国产精品夜夜夜爽张柏芝| 国产精品国产自产拍在线| 国产伦精品一区二区三区照片91| 你微笑时很美电视剧整集高清不卡| 免费网站观看电影入口| 国产日韩视频在线观看| 亚洲国产综合av| 日本免费三片免费观看| 国产成人艳妇aa视频在线|