本文所講爲其中之一:iOS程序進入後臺後十分鐘以內就會被系統kill掉,怎麼解決呢?我想要程序進入後臺後仍然運行計時功能,不然就沒法達到考試的目的,以後在網上查閱了相關資料最後終於找到答案,其精髓就是:利用蘋果給出的三種類型的程序能夠保持在後臺運行:音頻播放類,位置更新類,另一個記不太清楚了,我利用了蘋果給出的音頻播放類的這個「特權」來知足我程序上的要求,詳細步驟以下:html
一、步驟一:在Info.plist中,添加"Required background modes"鍵,value爲:App plays audio多線程
步驟二:在程序完成加載時添加代碼app
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ async
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch.ide
NSError *setCategoryErr = nil; 函數
NSError *activationErr = nil; ui
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr]; spa
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr]; 線程
self.window.backgroundColor = [UIColor whiteColor]; code
[self.window makeKeyAndVisible];
return YES;
}
步驟三:將如下代碼添加到appDelegate文件中的- (void)applicationDidEnterBackground:(UIApplication *)application函數,也可添加到在具體類中註冊的應用進入後臺後的通知方法
- (void)applicationDidEnterBackground:(UIApplication *)application{
UIApplication *app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid){
bgTask = UIBackgroundTaskInvalid;
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid){
bgTask = UIBackgroundTaskInvalid;
}
});
});
}
完成以上步驟你會發現,程序進入後臺後仍可運行多線程,NSTimer
轉載來源http://www.cnblogs.com/zzltjnh/archive/2013/05/15/3080058.html