当前位置:  开发笔记 > IOS > 正文

退出iPhone应用程序的正确方法?

如何解决《退出iPhone应用程序的正确方法?》经验,为你挑选了11个好方法。

我正在编写一个iPhone应用程序,我需要强制它退出,因为某些用户操作.清理内存后分配的应用程序,调用终止应用程序的适当方法是什么?



1> August..:

在iPhone上没有退出应用程序的概念.应该导致应用退出的唯一操作是触摸手机上的"主页"按钮,这不是开发人员可以访问的内容.

根据Apple的说法,您的应用不应该自行终止.由于用户未点击"主页"按钮,因此返回主屏幕会让用户感觉您的应用已崩溃.这是令人困惑的非标准行为,应该避免.


我仍然不同意.当他们醒来时,应用程序"消失",让用户不知道发生了什么.相反,在你的应用程序中设置一个计时器,然后当时间到了,闲置应用程序 - 没有活动.一个绝对没有任何东西的应用程序不会耗尽电池.Springboard也是一个应用程序 - 它不会因为节省能源而关闭.相反,它只是等待用户输入.
我们有帮助人们入睡的应用程序.他们希望应用程序在一段时间后终止以减少电池消耗.我认为这种情况是可以接受的 - 因为用户希望睡着了,不能手动退出应用程序.
正如我所说,这是非标准的行为,应该避免.iPhone应用程序不是桌面应用程序.不要这样对待它们.
我可以理解苹果的意见,但我有类似的情况,我的应用程序需要互联网访问,如果它不可用,他们应该能够离开应用程序而不是只是有一个错误消息
这并没有真正回答这个问题.这是100%准确,但我认为理想情况下可能是对OP的问题或接受的答案的评论.
@jdandrea:客户已经暗中接受了Apple的标准EULA或您客户的替代EULA.在应用启动时,我希望苹果公司拒绝接受EULA对话.
任何应用程序开发人员的目标应该是拥有一个用户友好的应用程序,而不是用户敌对的应用程序.其中一个关键规则是适应他们的期望.这就是平台具有UI标准,官方或事实上的原因.iOS标准是应用程序在前台时不会退出.没有ifs,没有buts,没有特殊情况.您的应用在运行时会消耗太多电量吗?修理它.你需要一个EULA吗?不,你没有.你没有足够的内存来运行?使用"再试一次"按钮显示错误,以便用户可以切换应用程序或使用iTunes解决问题,然后返回.等等
我有一个应用程序,从政府客户端推送到用户的iPad.由于用户不从Apple应用程序商店下载此应用程序,因此他们无法在打开应用程序之前阅读EULA,我们必须在他们第一次打开应用程序时立即向他们展示EULA.我们的大多数用户并不是特别注重技术,如果应用程序在点击"拒绝"时没有关闭,他们就会感到困惑.
当我们无法在首次启动时初始化手机时,我正在制作一个退出按钮来处理这个案例.如果没有足够的可用空间,我无法构建我需要的数据库,用户无法使用该应用程序.我不能调用applicationWillTerminate,因为这对正常关机做了很多工作,我认为指导用户按下主页按钮是一个丑陋的黑客攻击.
@jdandrea这个应用程序是免费的应用程序?如果没有,你如何将钱退还给那些拒绝"最低限度EULA"的用户?
我的客户希望在首次启动时在UIAlertView中显示最小的EULA(使用拒绝/接受选项).如果他们拒绝,应用程序将立即关闭.否则,它继续.他们在安装后才看到这一次.那么呢?它仍然不标准吗?
@KiwiBastard:处理这种情况的正确方法是关闭空闲计时器,以便设备不会自动关闭并且您的应用程序继续运行.当应用程序的内部计时器到期时,重新启用空闲计时器并让设备自行关闭.

2> 小智..:

你试过exit(0)吗?

或者,[[NSThread mainThread] exit]虽然我没有尝试过,这似乎是更合适的解决方案.


由于这样做是禁止Apple(可能会导致您的应用程序在非标准界面的应用程序商店中被拒绝),因此将August的答案视为"正确的答案".仅供参考,这个答案(Brett's)适用于所有C程序,NSThread适用于所有Cocoa程序.
在Tech Q&A QA1561中,Apple强烈反对使用退出,因为它使应用程序看起来已经崩溃.http://developer.apple.com/iphone/library/qa/qa2008/qa1561.html
[[NSThread mainThread] exit]导致应用程序崩溃,因为exit不是实例方法.exit(0)会将应用程序发送到iOS 4中的后台.再次调用exit(0)会使其崩溃.至少在模拟器中.
我理解为什么这么多人都在反对这一点,但是给我们的开发者一些信用呢?我们都是成年人,我们想知道这个功能.我发现它对内部QA版本非常有用,当我第一次搜索它时,很高兴看到这个"不正确"的答案.
@Kevin"不要那样做"绝不是正确的答案.如果你愿意,可以发出警告和免责声明,但"我该怎么做"的唯一正确答案是"这是怎么做的".如果我正在寻找如何做某事(也许我想在调试时强制它退出),人们会正确地宣称"你没有!" 并试图埋葬我需要的答案是浪费我的时间.然而,许多人可能有不好的理由去做某事,正确的StackOverflow答案是回答问题的答案,因为有充分理由的人也会搜索他们的方式.
@Kevin不,对答案的投票并不是说你不喜欢这个问题的方式.不存在投票系统来过滤掉正确的答案,无论问题是否经常是坏主意.人们贬低答案是因为他们实际回答这个问题只是愚蠢,而且因为你没有想到它,所以某些东西不是"边缘情况"或"太局部化".至少在这种情况下,平均值赢了.
更容易理解的是这样使用它:`exit(EXIT_SUCCESS);`

3> Salim..:

exit(0)对用户显示为崩溃,因此向用户显示确认消息.确认暂停(按主题按钮按下编程)并等待2秒,当应用程序进入动画背景时,然后退出用户视图后面

-(IBAction)doExit
{
    //show confirmation message to user
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Confirmation"
                                                 message:@"Do you want to exit?"
                                                delegate:self
                                       cancelButtonTitle:@"Cancel"
                                       otherButtonTitles:@"OK", nil];
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != 0)  // 0 == the cancel button
    {
        //home button press programmatically
        UIApplication *app = [UIApplication sharedApplication];
        [app performSelector:@selector(suspend)];

        //wait 2 seconds while app is going background
        [NSThread sleepForTimeInterval:2.0];

        //exit app when app is in background
        exit(0);
    }
}


@GajendraKChauhan`exit(0)`没关系。重点是您的应用程序具有“退出行为”。除了一些非常重要的第三方制作的应用程序外,AppStore本身也禁止退出行为。同样,模仿主页按钮的行为也将被拒绝。

4> Wagh..:

点击此处查看问答:https://developer.apple.com/library/content/qa/qa1561/_index.html

问:如何以编程方式退出iOS应用程序?

没有为优雅地终止iOS应用程序提供API.

在iOS中,用户按下主页按钮以关闭应用程序.如果您的应用程序具有无法提供其预期功能的条件,建议的方法是为用户显示警告,指示问题的性质以及用户可能采取的操作 - 打开WiFi,启用位置服务等.允许用户自行决定终止申请.

警告:不要调用该exit功能.应用程序调用exit将显示给用户崩溃,而不是执行正常终止并动画回到主屏幕.

此外,可能无法保存数据,因为如果调用exit,则不会调用-applicationWillTerminate:类似的UIApplicationDelegate方法.

如果在开发或测试期间有必要终止您的应用程序,建议使用该abort函数或assert



5> 小智..:

它不是一种退出计划的方式,而是一种迫使人们戒烟的方法.

UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Hit Home Button to Exit" message:@"Tell em why they're quiting" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
[anAlert show];


至少在模拟器上,如果这样做,当用户重新打开应用程序时,警报仍然存在.因此,我建议给他们至少一个按钮.

6> 小智..:

转到info.plist并选中"应用程序不在后台运行"键.这次当用户单击主页按钮时,应用程序完全退出.



7> 小智..:

将application-info.plist上的UIApplicationExitsOnSuspend属性添加为true



8> rchampourlie..:

经过一些测试,我可以说以下内容:

使用私有接口:[UIApplication sharedApplication]会导致应用看起来像崩溃,但它会- (void)applicationWillTerminate:(UIApplication *)application在这之前调用;

使用exit(0);也将终止应用程序,但它看起来"正常"(跳板的图标显示为预期,具有缩小效果),但它不会调用- (void)applicationWillTerminate:(UIApplication *)application委托方法.

我的建议:

    手动调用- (void)applicationWillTerminate:(UIApplication *)application代理人.

    打电话exit(0);.



9> 小智..:

您的ApplicationDelegate会收到用户有意退出的通知:

- (void)applicationWillResignActive:(UIApplication *)application {

当我收到此通知时,我只是打电话

        exit(0);

所有的工作都做到了.最好的是,这是戒烟的意图,这就是为什么这不应该是在那里调用它的问题.

在我的音频应用程序上,当人们在音乐还在播放时同步他们的设备时,有必要退出应用程序.一旦同步完成,我会收到通知.但在此之后立即退出应用程序实际上看起来像是崩溃.

所以我设置了一个标志,以便在下一次后台操作时真正退出应用程序.可以在同步后刷新应用程序.



10> 小智..:

我的应用程序最近被拒绝了,我使用了一种无证的方法.从字面上看:

"不幸的是,它无法添加到App Store,因为它使用的是私有API.禁止使用非公开API,如iPhone开发人员计划许可协议第3.3.1节所述:

"3.3.1应用程序只能以Apple规定的方式使用Documented API,不得使用或调用任何私有API."

应用程序中包含的非公共API是terminateWithSuccess"



11> AGPX..:

Apple说:

"警告:不要调用退出函数.调用exit的应用程序将显示给用户崩溃,而不是执行正常终止并动画回到主屏幕."

我认为这是一个不好的假设.如果用户点击退出按钮并显示一条消息,如下所示:"应用程序现在将退出.",它似乎没有崩溃.Apple应提供退出应用程序的有效方法(不是退出(0)).


他们这样做是调用Home按钮,它可以位于任何iDevice的底部.因此,因此无需构建自己的退出按钮.
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有