【问题标题】:How can I know whether app is terminated by user?我如何知道应用程序是否被用户终止?
【发布时间】:2011-09-22 07:52:23
【问题描述】:

我如何知道应用程序是否被用户终止?

(双击主页按钮并按红色减号'-'按钮)

我需要示例或伪代码...

【问题讨论】:

标签: iphone ios ipad


【解决方案1】:

有时您确实会收到UIApplicationWillTerminateNotification(您也可以在您的应用委托中实现applicationWillTerminate: 方法),但在这种情况下,您并不能保证您会收到任何通知。所以不要依赖它。

如果您的应用“暂停”,即处于后台但未运行,您将不会收到通知。在暂停的情况下,您只会被不可捕获的SIGKILL 杀死。当你因内存不足而被杀死时也是如此。

来自applicationWillTerminate: 的文档(强调我的):

对于不支持后台执行或链接到 iOS 3.x 或更早版本的应用程序,当用户退出应用程序时始终调用此方法。对于支持后台执行的应用程序,当用户退出应用程序时通常不会调用此方法,因为在这种情况下应用程序只是移动到后台。但是,此方法可能在应用程序在后台运行(未暂停)并且系统出于某种原因需要终止它的情况下调用。

【讨论】:

  • 为什么?我认为这是有保证的。但不能保证您是否在 Xcode 中停止您的应用程序。
【解决方案2】:

当用户终止应用时:

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

}

应用程序将进入非活动状态:

 - (void)applicationWillResignActive:(UIApplication *)application
 {
  NSLog(@"Application Did Resign Active");
 }

用户按下主页按钮:

 - (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}

【讨论】:

  • 你检查过 applicationWillTerminate 被调用了吗?
  • 我已经尝试从跳板和 XCode 中杀死应用程序,但它没有被调用,我认为您必须实施 applicationDidEnterBackground 以确保您的应用程序执行您想要的操作。
  • 我设法让这种方法发挥作用的唯一方法是在应用程序的 Info.plist 中禁用“多任务处理”。这是您可以确保始终调用此方法的唯一方法。但这不是一个好的解决方案,所以只需在 applicationDidEnterBackground 中完成您的任务
【解决方案3】:

试试这个:

- (void)applicationWillTerminate:(UIApplication *)application
{
    /*
     Called when the application is about to terminate.
     Save data if appropriate.
     See also applicationDidEnterBackground:.
     */
}

您应该在实现UIApplicationDelegate的类中实现上述方法

更多注意事项:如果您通过 Xcode(停止调试按钮)停止应用程序,则不会调用该方法。所以测试时请耐心等待。

【讨论】:

  • 这个方法没有被调用。我检查了控制台(Organizer-Devices)
  • NSLog(@"_____Appliction will term-.");不叫。我把这段代码放在 applictaionWillTerminate 方法中。
  • 我总是在停止调试模式后进行测试。
  • @Nekto:不保证您会在多任务应用程序中收到此方法。仅当您在后台但尚未暂停时才能获得它。
  • 感谢@DarkDust。对@ChangUZ,我建议使用方法- (void)applicationDidEnterBackground:(UIApplication *)application...也许它会帮助你
【解决方案4】:

还有这个:

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

}

如果您想知道它是否进入后台可能会有所帮助;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-12
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多