退出iOS 4.0中的应用程序

时间:2010-06-22 21:23:02

标签: ios ios4

在iOS4.0之前点击iPhone上的主页按钮退出应用程序,Apple在他们的指南中没有接受以编程方式退出应用程序。

现在iOS4.0中的所有内容都发生了变化,单击主页按钮会使您的应用处于暂停模式(多任务处理)..我认为应该有一个明确的方式让用户退出应用程序,如退出按钮。

苹果现在好吗?怎么可以呢?

11 个答案:

答案 0 :(得分:50)

您可以设置Info.plist键UIApplicationExitsOnSuspend以确保应用程序完全终止。

答案 1 :(得分:22)

不,不应该这样做。

你有不同阶段的处理程序,所以这就是你应该这样做的。手动退出没有意义。如果你重新启动应用程序,理想情况下它会从你离开的地方开始,所以这可以通过恢复或启动并加载旧状态来实现。

没有理由退出。

修改

随着这种情况不断出现:iOS Human Interface Guidelines说“不要以编程方式退出”。我们已经看到很多关于应用程序在过去曾调用exit()的报告。

当然,通过在Info.plist文件中设置适当的键来退出而不是挂起是完全正常的 - 但这不是专用的UI按钮,只是通过主页按钮的程序退出的特定于应用程序的实现。

答案 2 :(得分:8)

有一个原因可以通过编程方式调用exit()

假设您有一个总是在启动时启动的voip应用程序,并在被系统杀死时重新启动,例如当记忆警告发生时。通常它是首选行为,因为你需要在后台运行才能维护你的voip TCP套接字。

但是,如果应用程序支持多种操作模式 - 例如a)使用TCP在后台运行,b)不在后台运行但仅在接受PUSH通知后启动 - ,如果用户在b)模式下使用应用程序他并不认为该应用正在消耗可用于其他应用的内存。

如果应用程序可以检查启动是否已启动到后台并且用户希望应用程序以b)模式运行并且优雅地exit(0),那么它将不再自动重启。

答案 3 :(得分:6)

另见iOS Debugging Magic (Technical Note TN2239)

  

请注意iOS应用程序生命周期受用户控制,这意味着iOS应用程序不应该只是退出。您的发布版本应仅在其崩溃的情况下调用中止,并且中止调用可防止损坏用户数据或允许您更轻松地诊断问题。

关于确定过早退出原因的主题,Understanding and Analyzing iPhone OS Application Crash Reports (Technical Note TN2151)可能会引起关注。

很抱歉有点偏离主题,但它与早期退出和诊断有关。

杰夫

答案 4 :(得分:3)

我有一个真正的问题。手动或人工退出有一个重点。

使用以前的iPhone OS,我的应用程序在终止时在plist中写出其状态(第一次使用或第二次使用等)。当用户回来时,它想通过阅读plist来展示不同的东西。此外,它还希望每次用户退出后都显示第一个屏幕。

随着应用程序在iPhone OS4的后台暂停,应用程序会从它停止的位置返回(即在用户所在的位置显示相同的屏幕)并且永远不会更改其状态,因为现在从未调用applicationWillTerminate。 / p>

绝对这是大多数时候所需要的行为(当你临时离开应用程序时能够继续),必须有一种方法可以选择,即暂停或退出。

由于设置UIApplicationExitsOnSuspend = YES只提供一种方式(即它总是在按下HOME时终止),这不是我正在寻找的解决方案。

我希望应用程序在整个步骤链完成后知道,而不是只是序列被暂停,并在适当的时候退出。

要做到这一点,我必须能够终止应用程序并在用户完成整个序列后写出状态。其他时候,我只是希望暂停该应用。

如果您点按两次HOME按钮,则可以看到已暂停的应用。我可以通过更长时间触摸来删除(退出)我的应用并触摸出现的( - )符号,但这对用户来说并不是那么直观,而且步骤太多了。

另一种选择是将Quit按钮作为我的应用程序中的Nav选项卡之一,但这很难看。目前,我唯一的选择似乎是选择设置UIApplicationExitsOnSuspend = YES。

答案 5 :(得分:3)

您始终可以使用exit(1)。这是一个原始/强制退出,带有代码/原因的整数。 您可以在开发期间使用它,例如在您想要终止时的模拟模式中;就像现在一样。

答案 6 :(得分:3)

以下是@Joost Schuur的步骤;答案:

  1. 打开 info.plist 文件

  2. 添加密钥 UIApplicationExitsOnSuspend或选择应用程序 不在后台运行

  3. 将新密钥设为 YES或填写复选框

  4. applicationWillResignActiveapplicationWillTerminate中的断点会显示它有效。

答案 7 :(得分:0)

你不应该这样做。当用户想要退出您的应用时,他将按下HOME按钮。

当用户按下主页按钮时,您会收到UIApplicationWillResignActiveNotification通知。使用该通知来删除所有资源。

当用户按下主页按钮时,您的应用程序基本上应该“隐藏在角落里”(尽可能少地占用内存)。但是,有一个权衡,因为你拆掉的越多,当用户切换回来时需要再次显示应用程序所需的时间越长(需要重新加载所有资源)。

答案 8 :(得分:0)

您可以这样做:

@IBAction func yourButtonAcation(_ sender: Any) {

    UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)

}

答案 9 :(得分:0)

只需使用以下方法即可轻松退出动画

   @IBAction func MinimizeOrKillApp(){            
        UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)
        //Comment if you want to minimise app
        Timer.scheduledTimer(withTimeInterval: 0.2, repeats: false) { (timer) in
            exit(0)
        }
    }

Output

Download sample code

不建议这样做,您的应用将被拒绝?。我们都是开发人员,我们知道如何从审核者团队中批准它

Apple developer question

答案 10 :(得分:-4)

您可以使用此私有命令以编程方式将应用程序放在后台:

(但是如果您使用它,您的应用会被拒绝)

[[UIApplication sharedApplication] suspend];