让程序退出后台时继续运行10分钟

本文详细介绍了如何在iOS应用的AppDelegate中实现后台定时任务管理,包括如何开始、停止、检查和处理后台任务,确保应用在后台运行时能够执行必要的清理工作并避免资源浪费。

XXAppDelegate中增加:UIBackgroundTaskIdentifierbgTask;

-(void)applicationDidEnterBackground:(UIApplication*)application

{

bgTask= [application beginBackgroundTaskWithExpirationHandler:^{

//10分钟后执行这里,应该进行一些清理工作,如断开和服务器的连接等

//...

//stopped or ending the task outright.

[applicationendBackgroundTask:bgTask];

bgTask= UIBackgroundTaskInvalid;

}];

if(bgTask== UIBackgroundTaskInvalid){

NSLog(@"failedto start background task!");

}

//Start the long-running task and return immediately.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{

//Do the work associated with the task, preferably in chunks.

NSTimeIntervaltimeRemain = 0;

do{

[NSThreadsleepForTimeInterval:5];

if(bgTask!=UIBackgroundTaskInvalid){

timeRemain= [application backgroundTimeRemaining];

NSLog(@"Timeremaining: %f",timeRemain);

}

}while(bgTask!=UIBackgroundTaskInvalid&& timeRemain > 0);//如果改为timeRemain> 5*60,表示后台运行5分钟

//done!

//如果没到10分钟,也可以主动关闭后台任务,但这需要在主线程中执行,否则会出错

dispatch_async(dispatch_get_main_queue(),^{

if(bgTask!= UIBackgroundTaskInvalid)

{

//和上面10分钟后执行的代码一样

//...

//if you don't call endBackgroundTask, the OS will exit your app.

[applicationendBackgroundTask:bgTask];

bgTask= UIBackgroundTaskInvalid;

}

});

});

}


-(void)applicationWillEnterForeground:(UIApplication*)application

{

//如果没到10分钟又打开了app,结束后台任务

if(bgTask!=UIBackgroundTaskInvalid){

[applicationendBackgroundTask:bgTask];

bgTask= UIBackgroundTaskInvalid;

}

}


后台时,如果某些代码你不希望执行,可以加以下条件:

UIApplication*application = [UIApplicationsharedApplication];

if(application.applicationState== UIApplicationStateBackground){

return;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值