iOS讓App后臺運行方法小結

一般App進入后臺之后,超過了后臺運行時間,便進入了掛起狀態,無法執行代碼,但是內存并沒有清除。
主要用到2個方法:
beginBackgroundTaskWithExpirationHandler://申請后臺,該方法只有在App處于激活時調用才有效。 endBackgroundTask://注銷后臺
后臺執行3分鐘方法:

#import "AppDelegate.h"
@interface AppDelegate ()
{ NSInteger count;}
@property(strong, nonatomic)NSTimer *mTimer;
@property(assign, nonatomic)UIBackgroundTaskIdentifier backIden;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 
count=0; 
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
_mTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countAction) userInfo:nil repeats:YES];
 [[NSRunLoop currentRunLoop] addTimer:_mTimer forMode:NSRunLoopCommonModes]; [self beginTask];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
 { 
NSLog(@"進入前臺"); 
[self endBack];
}//計時
-(void)countAction
{ 
NSLog(@"%li",count++);}//申請后臺
-(void)beginTask
{ 
NSLog(@"begin=============");
 _backIden = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ //在時間到之前會進入這個block,一般是iOS7及以上是3分鐘。按照規范,在這里要手動結束后臺,你不寫也是會結束的(據說會crash) NSLog(@"將要掛起=============");
 [self endBack]; }];
}//注銷后臺
-(void)endBack
{
 NSLog(@"end=============");
 [[UIApplication sharedApplication] endBackgroundTask:_backIden]; 
_backIden = UIBackgroundTaskInvalid;
}
@end

無限后臺的方法,慎用!因為這個需要申請后臺播放音頻的權限。如果你的應用不是相關應用,AppStore審核可能不會通過。
好了,看方法!
先在info.plist文件里添加如此一條記錄:

343943d3f4c2.png

AppDelegate.m文件

#import "AppDelegate.h"
@interface AppDelegate ()
{
 NSInteger count;
}
@property(strong, nonatomic)NSTimer *mTimer;
@property(assign, nonatomic)UIBackgroundTaskIdentifier backIden;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ // Override point for customization after application launch. 
count=0; 
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
_mTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countAction) userInfo:nil repeats:YES]; 
[[NSRunLoop currentRunLoop] addTimer:_mTimer forMode:NSRunLoopCommonModes]; [self beginTask];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
 { NSLog(@"進入前臺"); [self endBack];
}//計時
-(void)countAction
{ 
NSLog(@"%li",count++);
}//申請后臺
-(void)beginTask
{ 
NSLog(@"begin============="); 
_backIden = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"將要掛起=============");
 [self endBack]; }];
}//注銷后臺
-(void)endBack{ NSLog(@"end=============");
 [[UIApplication sharedApplication] endBackgroundTask:_backIden]; 
_backIden = UIBackgroundTaskInvalid;
}
@end
ViewController.m文件
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
@property(strong, nonatomic)AVAudioPlayer *mPlayer;
@property(assign, nonatomic)CGFloat mCount;
@end
@implementation ViewController
- (void)viewDidLoad 
{ [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. 
_mCount = 0;
 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(countTime) userInfo:nil repeats:YES]; 
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
-(void)countTime
{ _mCount+=10; 
NSLog(@"%f",_mCount);
 if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 60.) 
{//當剩余時間小于60時,開如播放音樂,并用這個假前臺狀態再次申請后臺 NSLog(@"播放%@",[NSThread currentThread]); 
[self playMusic]; //申請后臺
 [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"我要掛起了"); }]; 
}
}
-(void)playMusic
{ //1.音頻文件的url路徑,實際開發中,用無聲音樂 
NSURL *url=[[NSBundle mainBundle]URLForResource:@"歡沁.mp3" withExtension:Nil]; 
//2.創建播放器(注意:一個AVAudioPlayer只能播放一個url)
 _mPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
 //3.緩沖 [_mPlayer prepareToPlay];
 //4.播放 [_mPlayer play];
}
@end
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容

  • 一般來說,如果不進行后臺申請,在iOS系統上,當應用退到后臺后,只有5s的時間去執行代碼,之后將進入掛起狀態。只有...
    此心不改閱讀 22,544評論 28 111
  • iOS的多任務是在iOS4的時候被引入的,在此之前iOS的app都是按下Home鍵就被干掉了。iOS4雖然引入了后...
    晨曦景雪閱讀 4,126評論 1 7
  • 前言 對于APP的前后臺運行情況的了解,有助于我們在實際開發中規避一些問題,以及采取穩妥的方法處理和解決問題,是很...
    進無盡閱讀 3,200評論 7 12
  • IOS開發之----詳解在IOS后臺執行 文一 我從蘋果文檔中得知,一般的應用在進入后臺的時候可以獲取一定時間來...
    dongfang閱讀 1,392評論 0 7
  • 蘋果官網地址 Background Execution (后臺執行)當用于沒有-啟動應用,系統移到后臺狀態。對于很...
    helinyu閱讀 7,770評論 0 9