暂停应用程序。

22

如何暂停我的应用程序或向我的应用程序发送暂停消息?

我想模拟按下主页按钮。

6个回答

35

UIApplication有一个私有实例方法:

以下代码可以运行(在iPhone 3GS上测试):

UIApplication *app = [UIApplication sharedApplication];
[app performSelector:@selector(suspend)];

这是否被应用商店接受?我知道在某些情况下,exit(0)会被拒绝。但是我不确定suspend会怎样。你能给我确认一下吗? - Chan
4
在提交至应用商店的应用中,您绝不应调用私有API。请参考Brad的答案获取最佳实践建议。 - Rob
1
这并不是鼓励您使用私有API,但我已经在应用商店中发布了带有此API的应用程序。虽然在提交时会显示警告,指出使用了私有API。 - sole007
如果它是私有的,你就不能使用。在任何生产应用程序中都不要使用任何私有API,否则可能会让你陷入麻烦! - Alex Cio
这还能用吗?我们只想在一些单元测试中使用它(不在应用商店中),来测试一些后台处理逻辑。使用下面的 Swift 版本运行后,应用程序状态仍然是活动的。在我花太多时间弄清楚原因之前,我想看看其他人是否在2022年成功使用过它。 - chadbag

22

在Swift中:

let application = UIApplication.shared
let suspend = #selector(URLSessionTask.suspend)
application.sendAction(suspend, to: application, from: nil, for: nil)

工作正常!一旦暂停,是否有一种编程方式可以恢复它? - Amg91
我认为没有。 - ChikabuZ
你们知道如何在 Xamarin 中实现这个场景吗? - Qhori

17
退出应用程序或通过编程将其发送到后台是iOS 人机界面准则的违规操作,这通常不利于通过审核过程:

不要通过编程方式退出

永远不要通过编程方式退出iOS应用程序,因为人们往往会将其解释为崩溃。然而,如果外部环境阻止您的应用程序按预期运行,您需要告诉用户有关情况并解释他们可以采取什么措施。根据应用程序故障的严重程度,您有两个选择。

显示一个漂亮的屏幕来描述问题并建议进行更正。屏幕提供反馈,向用户保证您的应用程序没有任何问题。它让用户掌控,让他们决定是否要采取纠正措施并继续使用您的应用程序,或者按Home键打开其他应用程序

如果您的应用程序的某些功能无法正常工作,请在人们激活该功能时显示屏幕或警报。只有在人们尝试访问未正常工作的功能时才显示警报。

在该文档中先前已经解释了这一哲学原因:

人们应该主动控制和发起行动,而不是应用程序。尽管应用程序可以建议行动方案或警告危险后果,但是让应用程序代替用户做出决策通常是错误的。最好的应用程序在满足用户需求的同时,帮助他们避免危险后果,找到正确的平衡点。
当行为和控件熟悉、可预测时,用户会感觉更加掌控了应用程序。当操作简单明了时,用户可以轻松理解和记忆它们。
人们希望在开始操作之前有充分的机会取消操作,并希望有机会确认执行可能具有破坏性的操作的意图。最后,人们希望能够优雅地停止正在进行的操作。
在应用程序运行期间,没有必要强制将其置于后台。在屏幕上显示时,它应该保持完全功能,并且用户应该自行决定何时切换应用程序。

你说的是正确的,但应用程序会发出通知,并且应该重新打开关闭的应用程序。你知道正在发生什么,只有执行一些指令才能打开它。无论如何,谢谢! - Doom
@BradLarson 如果你创建一个返回/退出按钮来关闭应用程序呢?这样,你仍然给用户一个选择退出的机会。此外,我不同意禁止使用exit()函数,因为长时间过度使用主页按钮可能导致其失效,那么在这种情况下,用户如何退出返回到主屏幕呢? - OzzyTheGiant
有没有可能暂停我的iOS应用程序以测试特定的用例?我可以使用私有API,因为我只会在测试和开发中使用它。有什么提示吗? - Awais Fayyaz

1

你不能这样做。

如果你想退出你的应用程序,不要害怕拒绝并喜欢来自用户的错误报告电子邮件,你可以调用exit(0);


1
使用 exit(0) 将终止应用程序而不是挂起它(例如将其移至后台)。 - Pelle Stenild Coltau

-7

使用:

 sleep(15)

它将会暂停你的应用程序一段特定的时间


1
这将会冻结应用程序一段特定的时间(如果在主队列上执行),这与暂停它(例如将其移至后台)不同。 - Pelle Stenild Coltau
如果在主线程上使用sleep超过10秒,操作系统将会终止您的应用程序。 - Juraj Antas

-9
当应用程序被挂起时,会发布一个UIApplicationWillResignActiveNotification通知。
我猜你可以尝试手动发布此通知。不过我自己没有尝试过。

通知是由iOS引发的,自己调用该方法不会暂停应用程序。 - Pelle Stenild Coltau
此外,当应用程序变为“非活动状态”而不是“挂起状态”时,将发送此通知。这是非常不同的事情。据我所知,当应用程序被挂起时没有任何通知。 - Sharon Minsuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接