我试图使用Swift编写代码,以编程方式在iOS8应用程序中返回到主屏幕。但我希望应用程序可以在后台继续运行。有没有什么好的想法?
谢谢提前帮助。
谢谢提前帮助。
UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)
override func motionEnded(motion: UIEventSubtype,
withEvent event: UIEvent?) {
if motion == .MotionShake{
//Comment: to terminate app, do not use exit(0) bc that is logged as a crash.
UIControl().sendAction(Selector("suspend"), to: UIApplication.sharedApplication(), forEvent: nil)
}}
Swift 4:
UIControl().sendAction(#selector(NSXPCConnection.suspend),
to: UIApplication.shared, for: nil)
编辑:值得一提的是,在iOS 12中,如果应用程序在发送挂起操作后从后台返回,则会出现一个错误,导致无法连接到网络。
finish()
时,它的工作方式类似于Android上关闭主活动,但如果您选择返回,则仍可从内存中使用。 - OzzyTheGiantimport Darwin exit(0)
如果你想让你的应用程序进入后台,可以通过使用URL合法地启动另一个应用程序(例如Safari),使其处于前台。
请参阅:如何在Swift3中打开URL
UIApplication.shared.open()和旧版本的openURL是文档化的公共API。
如果您设置了 exits-on-suspend plist关键字,通过URL打开另一个应用程序也将终止您的应用程序。该关键字的使用是app plist关键字的文档化合法用途,可供任何应用程序“合法”使用。
此外,如果您的应用程序由于某种不礼貌的原因在后台继续分配和污染大量内存而未响应内存警告,则操作系统很可能会终止它。
关于 info.plist 的设置怎么样?
您可以使用编辑器在 info.plist 中将“应用程序不在后台运行”设置为 true。
或者使用代码编辑器添加以下行。
<key>UIApplicationExitsOnSuspend</key>
<true/>
除了崩溃、退出程序或调用非官方API之外,没有办法“以编程方式返回主屏幕”。这些方法都不被Apple所欢迎。此外,人机界面指南也涵盖了这一点。
更新:
也许苹果在这个问题上有不同的立场,但对于iOS8,不赞同的意见并不降低事实的真实性。这里甚至有人引用了苹果公司的评论:https://dev59.com/hm435IYBdhLWcg3wigkk#5362887
还请参阅现已过时的苹果技术问答