首先,我知道只支持voip,音频和位置应用程序在后台运行,并且它们将在播放音频或使用位置服务等时运行。
我想知道的是,如果有办法让我的应用程序在后台运行完全正常运行,那么对电池寿命的影响无关紧要。
这样,我的应用程序的用户可以从设置中进行选择,以便随时随地保持应用程序,并且只需要他想要的时间。例如,如果他正在等待需要运行应用程序的内容,则在收到消息后,他可以关闭保持活动功能。
我不知道这是否可行,但我读过一些帖子,但不幸的是他们没有说如何=(
更新:在this tutorial中,我发现Acrobits在Apple Store上有两个应用程序,“可以强制应用程序在后台保持活跃状态”。那么有办法做到这一点吗?
答案 0 :(得分:31)
从ioS 7开始,应用程序可以在后台运行更新的方式。 Apple现在认识到应用必须不断下载和处理数据。
- 在后台播放用户可听内容的应用,例如音乐播放器应用
- 在后台录制音频内容的应用。
- 随时向用户通知其位置信息的应用,例如导航应用
- 支持互联网协议语音(VoIP)的应用
- 需要定期下载和处理新内容的应用
- 从外部附件接收定期更新的应用
醇>
您可以使用X Code 5+在Info.plist中声明应用程序支持的后台任务。例如。将UIBackgroundModes键添加到应用程序的Info.plist文件中,并向阵列添加“fetch”值,使您的应用程序可以定期从网络下载和处理少量内容。您可以在XCode 5中的应用程序属性的“功能”选项卡中执行相同的操作(附加快照)
答案 1 :(得分:18)
您可以在应用程序指向后台后的有限时间内执行任务,但仅限于提供的持续时间。运行时间超过此时间将导致您的应用程序终止。有关如何解决此问题,请参阅“iOS应用程序编程指南”的“Completing a Long-Running Task in the Background”部分。
其他人背负着在后台播放音频作为后台进程保持活力的手段,但如果音频播放是合法的功能,Apple将只接受这样的应用。关于Apple发布的评论指南的第2.16条规定:
多任务应用程序只能使用 为他们的目的服务 用途:VoIP,音频播放, 位置,任务完成,本地 通知等
答案 2 :(得分:7)
如果任何后台任务运行超过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");
}
答案 3 :(得分:3)
要在iOS设备上运行,请将您的应用设置为音频播放器/录像机或VOIP应用程序,用于提交到App商店的合法应用程序,或者仅供您自己使用的假冒应用程序。
即使这样也不会使应用程序“完全正常运行”,但仅限于有限的API。
答案 4 :(得分:2)
取决于它的作用。如果你的应用程序占用太多内存,或者不应该调用函数/类,SpringBoard可能会终止它。但是,它很可能会被Apple拒绝,因为它没有遵循它们的7种背景用途。
答案 5 :(得分:1)
可能是链接将帮助bcz你可能必须在应用程序运行的后台方法中实现Appdelegate中的代码。 另请参阅developer.apple.com网站以获取应用程序类 Here是在后台运行应用
的链接