iOS程序進入後臺後仍運行定時器

最近再做一個iOS應用,擁有考試計時的功能,開發期間也是遇到各種各樣的小問題,本文所講爲其中之一:iOS程序進入後臺後十分鐘之內就會被系統kill掉,怎麼解決呢?我想要程序進入後臺後仍然運行計時功能,否則就無法達到考試的目的,之後在網上查閱了相關資料最後終於找到答案,其精髓就是:利用蘋果給出的三種類型的程序可以保持在後臺運行:音頻播放類,位置更新類,另外一個記不太清楚了,我利用了蘋果給出的音頻播放類的這個“特權”來滿足我程序上的要求,詳細步驟如下:

1、步驟一:在Info.plist中,添加"Required background modes"鍵,value爲:App plays audio

步驟二:找到appDelegate.m中的方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
在裏面添加音頻的相應代碼

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    NSError *setCategoryErr = nil;
    NSError *activationErr  = nil;
    [[AVAudioSession sharedInstance]
     setCategory: AVAudioSessionCategoryPlayback
     error: &setCategoryErr];
    [[AVAudioSession sharedInstance]
     setActive: YES
     error: &activationErr];
    self.window.backgroundColor = [UIColor whiteColor];
    [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;
            }
        });
    });
}


大功工程,現在即使程序進入後臺,定時器依舊會走,不會停止。


原文地址:http://www.cnblogs.com/zzltjnh/archive/2013/05/15/3080058.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章