在iphone中创建递归后台处理程序是否合法?(应用程序进入后台时处理)

发布于 2024-12-07 03:39:05 字数 150 浏览 2 评论 0原文

如果我为后台应用程序注册一个应用程序,并在“确实进入后台”中创建一个后台处理程序,大约需要 10 分钟来完成任务,时间结束后,处理程序将调用完成块,并在此块中再次创建您将再次获得的后台处理程序10分钟等等,这样应用程序将保持在后台。我的意思是这样做可以吗......?或者苹果会反对吗?

If I register an app for background app in did enter background and make a background handler with approximately 10 mins to finish the task, after the time is over the handler will call finishing block and in this block again create the background handler you will get again 10 mins and so on, in this way application will remain in background. I mean is it OK to do that....? or will apple object to this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

停顿的约定 2024-12-14 03:39:05

来自文档

运行后台任务的应用程序的运行时间是有限的
来运行它们。 (您可以使用以下命令了解可用时间
backgroundTimeRemaining 属性。) 如果您不调用
endBackgroundTask:对于每个任务在时间到期之前,系统杀死
应用程序。

所以,不,您不能无限期地在后台运行。

From the documentation:

Applications running background tasks have a finite amount of time in
which to run them. (You can find out how much time is available using
the backgroundTimeRemaining property.) If you do not call
endBackgroundTask: for each task before time expires, the system kills
the application.

So, no, you can't indefinitely run in the background.

∝单色的世界 2024-12-14 03:39:05

是的,没错,你不能以这种方式无限奔跑。但我发现了另一个技巧,当应用程序进入后台时,开始播放 0 音量的音频:-) 你的应用程序永远不会被杀死。

Yeah thats correct, you cannot run infinitely in this way. But i have found one more trick, when applicatuon enters background, start playing an audio with 0 volume :-) Your app will never get killed.

电影里的梦 2024-12-14 03:39:05

有一个 VoIP 应用程序 Media5,它可以使用 UDP 套接字在后台接收来电。

开发人员表示,他们使用了一种“技巧”来使应用程序永远保持活动状态,而我会排除无声音频播放选项。所以问题是:那是什么技巧?

Bria 还可以在后台使用 UDP 进行接收。

There is a VoIP app, Media5, which can receive in background incoming calls using UDP sockets.

Developers said they used a "trick" to mantain the app active forever and I'd exclude the silent audio playing option. So the question is: what's that trick?

Also Bria can receive with UDP in background.

念﹏祤嫣 2024-12-14 03:39:05

摘自问题 515:支持多任务处理的 iPhone 的后台应用程序支持:

我很确定,如果不连续播放音频文件或
记录 GPS 位置,您无法保持 UDP 侦听套接字处于活动状态
iOS 4.3+(在主线程或辅助线程中)。如果你玩
使用 AVAudioPlayer 播放音频(初始化 AudioSession 后
之前)在每 5 秒一次 nsrunloop 中,主线程保持活动状态
而且不需要声明音频背景
info.plist 中的支持。

我认为这是Media5和Bria使用的“伎俩”。我也尝试过
创建一个无限 TCP 流到环回接口声明它
作为 VoIP,只是为了看看 UDP 套接字是否也保持活动状态。答案是
不,只有 TCP 套接字在后台工作(并且在屏幕上
锁定),同时UDP关闭,无法监听传入
不再打电话了。

所以关键点是主线程必须保持活动状态...使用
单独一个简单的 ntimer o 无限运行循环是没有用的,因为
看门狗会在后台几秒钟后终止该进程(除非
您在附加 GDB 接口的调试模式下工作,它会永远运行)。

From Comment 20 at Issue 515: Background app support for iPhones with multitasking support:

I'm pretty sure that without playing continuously an audio file or
logging GPS position you cannot keep alive UDP listening sockets in
iOS 4.3+ (both in the main thread or in a secondary one). If you play
an audio play with AVAudioPlayer (after initializing an AudioSession
before) in a nsrunloop every 5 seconds, the main thread is kept active
and moreover it's NOT necessary to declare the audio background
support in info.plist.

I think this is the "trick" used by Media5 and Bria. I tried also
creating a infinite TCP stream to the loopback interface declaring it
as VoIP, just to see if also UDP socket is kept alive. The answer is
no, only TCP sockets works while in background (and with screen
locked), UDP is closed in the meanwhile and cannot listen for incoming
calls anymore.

So the key point is that the main thread must be kept active... using
a simple nstimer o infinite runloop alone is useless, since the
watchdog kills the process after few seconds in background (except if
you work in debug mode with GDB interface attached, it runs forever).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文