Ios 我如何确定用户何时终止应用程序?

Ios 我如何确定用户何时终止应用程序?,ios,objective-c,appdelegate,Ios,Objective C,Appdelegate,我正在开发一款应用程序,它依赖于会话,并基于会话生命周期工作: 当用户启动应用程序时,会话开始 当用户终止应用程序时,会话结束 这是一个非常简单和基本的概念,但我在实现它时遇到了困难 问题是此方法不可靠,可能无法调用: - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if app

我正在开发一款应用程序,它依赖于会话,并基于会话生命周期工作:

  • 当用户启动应用程序时,会话开始

  • 当用户终止应用程序时,会话结束

这是一个非常简单和基本的概念,但我在实现它时遇到了困难

问题是此方法不可靠,可能无法调用:

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
其余的AppDelegate方法在多任务处理期间调用,它们没有任何用处,因为它们与会话的开始或结束无关。(尽管我现在用的就是这个)

以下是我尝试过的:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

    static BOOL firstTime = YES;

    if (firstTime) {

        NSLog(@"First time!");

        firstTime = NO;
    }
    else {

        NSLog(@"Not first time...");
    }
}
这里有两个例子,这是行不通的:

  • 假设电池耗尽,设备关闭。下次启动应用程序时,它将被视为第一次启动,即使它不是。只有在用户终止后,才会将其视为首次启动

  • 应用程序崩溃,下次启动时将被视为首次启动,但会话尚未结束。崩溃不是由用户终止的

  • 我不知道我是否已经走到了死胡同这就是为什么我请求你的帮助

    提前谢谢


    编辑:我正在寻找一种方法,随时知道用户何时从多任务中删除应用程序。如果应用程序崩溃,或者手机电池耗尽,或者由于任何其他原因而终止,除了用户在多任务处理中使用了刷卡功能,这对我来说没问题…

    我没有解决方案,我有理由相信没有解决方案。据我所知,没有办法做到这一点,因为操作系统可能只是选择停止你的应用程序冷。不给它任何执行任何代码的机会。例如,unix kill命令将执行此操作。您可以注册信号处理程序,但根据kill是什么,它们仍然可能无法运行。苹果可能不会接受你的应用

    根据您的解释,我假定您正在尝试在服务器上维护某种会话。如果是这种情况,那么我认为您需要从尝试在设备上管理它切换到在服务器上管理它。可能是某种不活动超时

    但是,我真正想做的是将会话管理转换为活动边界。这意味着当你的应用程序处于活动状态时,只有一个会话会更可靠


    但最终,无国籍是一条出路。尽可能避免会话将创建一个更可靠、更简单的应用程序。

    我没有解决方案,我有理由肯定没有。据我所知,没有办法做到这一点,因为操作系统可能只是选择停止你的应用程序冷。不给它任何执行任何代码的机会。例如,unix kill命令将执行此操作。您可以注册信号处理程序,但根据kill是什么,它们仍然可能无法运行。苹果可能不会接受你的应用

    根据您的解释,我假定您正在尝试在服务器上维护某种会话。如果是这种情况,那么我认为您需要从尝试在设备上管理它切换到在服务器上管理它。可能是某种不活动超时

    但是,我真正想做的是将会话管理转换为活动边界。这意味着当你的应用程序处于活动状态时,只有一个会话会更可靠


    但最终,无国籍是一条出路。尽可能避免会话将创建一个更可靠、更简单的应用程序。

    维护此类会话的唯一方法是使用
    应用程序:willFinishLaunchingWithOptions:
    应用程序:didffinishlaunchingwithoptions:
    结束上一个会话并启动新会话


    这确实意味着一次“会议”可能会持续很长时间,但是,选择与操作系统允许的不匹配的会话定义是错误的。

    维护这样的会话的唯一方法是使用
    应用程序:willFinishLaunchingWithOptions:
    应用程序:didffinishlaunchingwithoptions:
    结束上一个会话并启动新会话


    这确实意味着“会话”可能会持续很长时间,但这是为会话选择与操作系统允许的不匹配的定义的错误。

    你真的应该假设永远不会调用该方法,并查看会话结束的不同触发器。应用程序不需要在后台运行。我只是想知道用户何时向上滑动应用程序以从多任务中删除。这就是全部!即使如此,也没有可靠的答案。。。为什么应用程序会在那里终止?你不知道。用户终止应用程序和操作系统终止应用程序之间没有区别。你需要重新定义会话。这是出于历史原因,它是在很早的iOS版本中调用的……你真的应该假设这个方法永远不会被调用,并查看会话结束时的不同触发器。应用程序不需要在后台运行。我只是想知道用户何时向上滑动应用程序以从多任务中删除。这就是全部!即使如此,也没有可靠的答案。。。为什么应用程序会在那里终止?你不知道。用户终止应用程序和操作系统终止应用程序之间没有区别。你需要重新定义会话。由于历史原因,它在早期版本的iOS中被调用。。。
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    
        static BOOL firstTime = YES;
    
        if (firstTime) {
    
            NSLog(@"First time!");
    
            firstTime = NO;
        }
        else {
    
            NSLog(@"Not first time...");
        }
    }