IOS后台多任务

IOS系统本身支持多任务,但是苹果出于对电量的控制,当用户按下home键后,切到后台的app一般就被系统pend了;前面提到一般,就说明还有不一般的app,到底是什么类型的app,这里不做说明。如何让一般的app可以在后台永久的运行呢?办法就是将一般的app处理成苹果允许后台运行的“不一般”的app。

我这里有两个办法:

1、使用一个无声的音频文件,当app切换到后台后就开始无限循环播放。这样你的app就永远在后台活着了,你在后台想做什么,都可以。

2、循环向系统申请“任务时间片“,也能保证你的app就永远在后台活着。


对比而言,第二种办法较为妥当(第一种可能被来电或者其他播放软件打断)。下面是操作代码:


在你app的程序代理实现文件中添加红色显示的代码(验证下吧,添加个定时器,看看是不是切换到后台后永远跑着)


 #import "MQLAppDelegate.h"

@interface MQLAppDelegate ()

//时间片标识begin
@property UIBackgroundTaskIdentifier newtaskID;
@property UIBackgroundTaskIdentifier oldtaskID;
//时间片标识end


@end

@implementation MQLAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //时间片标识begin
    self.newtaskID = self.oldtaskID = UIBackgroundTaskInvalid;
    //时间片标识end

    
    return YES;
}

- (void)applicationDidEnterBackground:(UIApplication *)application {

    //时间片标识begin
    self.newtaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
    
    if (self.newtaskID != UIBackgroundTaskInvalid && self.oldtaskID != UIBackgroundTaskInvalid)
    {
        [[UIApplication sharedApplication] endBackgroundTask: self.oldtaskID];
    }
    self.oldtaskID = self.newtaskID;
    //时间片标识end

}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    //时间片标识begin
    if (self.oldtaskID != UIBackgroundTaskInvalid) {
        
        [[UIApplication sharedApplication] endBackgroundTask: self.oldtaskID];
        self.oldtaskID = UIBackgroundTaskInvalid;
    }
    //时间片标识end

}


@end 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值