【问题标题】:iPhone - How to catch if the app is terminated (to update the badge icon)iPhone - 如果应用程序终止,如何捕捉(更新徽章图标)
【发布时间】:2012-01-30 20:31:38
【问题描述】:

我正在设置:

- (void)applicationWillTerminate:(UIApplication *)application
{
    [UIApplication sharedApplication].applicationIconBadgeNumber = 1;
}

在我的应用程序委托中,但徽章从未更新...可能是什么问题?

当应用程序被终止(手机关机、任务栏应用程序终止、应用程序因内存过载而被系统终止……)时,我该如何更新该标记?

【问题讨论】:

  • 你能在该行设置一个断点,并仔细检查当你从任务栏杀死应用程序时它实际上被调用了吗?

标签: iphone objective-c events process kill


【解决方案1】:

当您的应用在后台终止时,它没有机会自行清理。该应用程序在后台运行时已经暂停;当被杀死时,它只是从 RAM 中删除。您的徽章更新需要在此之前进行。

From the Apple docs

暂停 该应用程序在后台,但未执行代码。系统会自动将应用程序移至此状态,并且在此之前不会通知它们。挂起时,应用程序保留在内存中,但不执行任何代码。 当内存不足时,系统可能会在不通知的情况下清除挂起的应用程序,以便为前台应用程序腾出更多空间。

还有:

applicationWillTerminate:让您知道您的应用程序正在被终止。如果您的应用暂停,则不会调用此方法。

【讨论】:

    【解决方案2】:

    NSLog(@"App is being terminated."); 放入您的-applicationWillTerminate: 方法中。我想你会发现当你以你的方式终止应用程序时,并没有调用这个方法。

    您可以在应用正常执行期间或应用启动时设置应用的徽章图标。

    【讨论】:

    • 对,不叫。但我唯一需要做的事情是应用程序从正在运行的进程中被杀死。
    • 你不知道这个图标的徽章编号应该是什么吗?您可以在应用程序运行时随意更改徽章编号,因为用户在离开您的应用程序之前不会看到该图标。因此,如果您提前更改它,效果将与您在退出时更改它一样。
    • 我的徽章反映了应用程序未(不再)加载到内存中的事实。所以如果你有实现这个目标的想法......
    【解决方案3】:

    请通过app lifecycle documentation如下

    还可以尝试查看正在调用以下哪些方法

    applicationWillResignActive:
    applicationDidEnterBackground:
    

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 2022-10-06
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      相关资源
      最近更新 更多