Pau*_*l N 32 iphone objective-c keep-alive background-process ios4
首先,我知道只支持voip,音频和位置应用程序在后台运行,并且它们将在播放音频或使用位置服务等时运行.
我想知道的是,如果有办法让我的应用程序在后台运行完全正常运行,那么对电池寿命的影响无关紧要.
这样,我的应用程序的用户可以从设置中进行选择,以便随时随地保持应用程序,并且只需要他想要的时间.例如,如果他正在等待需要应用程序运行的内容,则在收到消息后,他可以关闭保持活动功能.
我不知道这是否可行,但我读过一些帖子,但不幸的是他们没有说如何=(
更新:在本教程中,我发现Acrobits在Apple Store上有两个应用程序"可以强制应用程序保持活动并在后台唤醒".那么有办法做到这一点吗?
Pra*_*evu 31
从ioS 7开始,应用程序可以在后台运行更新的方式.Apple现在认识到应用程序必须不断地下载和处理数据.
- 在后台播放用户可听内容的应用,例如音乐播放器应用
- 在后台录制音频内容的应用程序.
- 随时向用户通知其位置的应用,例如导航应用
- 支持互联网协议语音(VoIP)的应用
- 需要定期下载和处理新内容的应用
- 从外部配件接收定期更新的应用程序
您可以使用X Code 5+在Info.plist中声明应用程序支持的后台任务.例如.将UIBackgroundModes键添加到应用程序的Info.plist文件中,并向阵列添加"fetch"值,使您的应用程序可以定期从网络下载和处理少量内容.您可以在XCode 5中的"应用程序"属性的"功能"选项卡中执行相同操作(附加快照)
Bra*_*son 20
您可以在将应用程序指向后台后的有限时间内执行任务,但仅限于提供的持续时间.运行时间超过此时间将导致您的应用程序终止.有关如何解决此问题,请参阅" iOS应用程序编程指南"中的" 完成背景中的长时间运行任务 "部分.
其他人背负着在背景中播放音频作为后台进程保持活力的手段,但如果音频播放是合法的功能,Apple将只接受这样的应用程序.关于Apple发布的审核指南的第2.16项规定:
多任务应用程序只能将后台服务用于其预期目的:VoIP,音频播放,位置,任务完成,本地通知等
如果任何后台任务运行超过10分钟,则任务将被暂停,并且调用使用beginBackgroundTaskWithExpirationHandler指定的代码块来清理任务.可以使用[[UIApplication sharedApplication] backgroundTimeRemaining]检查后台剩余时间.最初,当App处于前景时,backgroundTimeRemaining设置为更大的值.当应用程序转到后台时,您可以看到backgroundTimeRemaining值从599.XXX(1o分钟)减少.一旦backgroundTimeRemaining变为ZERO,后台任务将被暂停.
//1)Creating iOS Background Task
__block UIBackgroundTaskIdentifier background_task;
background_task = [application beginBackgroundTaskWithExpirationHandler:^ {
//This code block is execute when the application’s
//remaining background time reaches ZERO.
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//### background task starts
//#### background task ends
});
//2)Making background task Asynchronous
if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
{
NSLog(@"Multitasking Supported");
__block UIBackgroundTaskIdentifier background_task;
background_task = [application beginBackgroundTaskWithExpirationHandler:^ {
//Clean up code. Tell the system that we are done.
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
}];
**//Putting All together**
//To make the code block asynchronous
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//### background task starts
NSLog(@"Running in the background\n");
while(TRUE)
{
NSLog(@"Background time Remaining: %f",[[UIApplication sharedApplication] backgroundTimeRemaining]);
[NSThread sleepForTimeInterval:1]; //wait for 1 sec
}
//#### background task ends
//Clean up code. Tell the system that we are done.
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
});
}
else
{
NSLog(@"Multitasking Not Supported");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109147 次 |
| 最近记录: |