iOS 实现后台长时间运行的思路

作者: shaneZhang 分类: ios技术 发布时间: 2014-08-26 10:01

对于ios7,苹果支持几种后台运行模式,backgroundTask,voip,后台播放音乐等,具体看官方文档就好。

需要在后台跑一个长时间运行的计时器,所以就不能让app进入suspend状态。

这个前提是要在工程的后台模式里选择Audio and AirPlay模块,Backgroud fetch模块

首先在

– (void)applicationDidEnterBackground:(UIApplication *)application

{

}

里面申请backgroundTask

[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]

实现一个可以运行几分钟的权限。

然后写一个计时器实时检测 backgroundTimeRemaining

- (void)tik
{
    // 这个是定时检查后台剩余时间
    if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 61.0) 
    {
        // 此处是播放一段空的音乐,声音为零时间很短循环播放的特点
        [self playAudio];
        [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
    }
}

很关键的一点是

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback 

withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error]

这样后台播放就不会影响到别的程序播放音乐了。

我这个计时器每分钟运行一次tik函数,如果发现后台运行时间小于一分钟了,就再去申请一个backgroundTask。

神奇的地方在于:backgroundTask不能在程序已经进入后台的时候申请,可以用一个播放音乐的假前台状态去申请,所以可以做到不断申请到权限,也就完成了长时间后台执行。

如果觉得我的文章对您有用,请随意打赏。如果有其他问题请联系博主QQ(909491009)或者下方留言!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注