首页 > 解决方案 > 当应用程序在后台时,我可以访问 AppDelegate 内的应用程序变量吗?

问题描述

我正在开发 react-native iOS 中的聊天应用程序。当在后台模式下收到新通知时,我想在主应用程序图标中显示徽章计数。现在我可以在主应用程序图标中显示徽章计数。但它会增加每个通知的计数。我想根据聊天来限制这一点。为此,我需要有新消息的聊天 ID。当应用程序在后台运行时,我可以在 Appdelegate.m 的 didReceiveRemoteNotification 方法中访问应用程序变量吗?

标签: iosobjective-creact-native-iosappdelegate

解决方案


只要您的代码正在运行,您就可以访问几乎所有内容,但有一些限制。

这里的问题是您认为什么是“应用程序变量”。这些很可能是已经在您的内存中的对象,可以didReceiveRemoteNotification毫无问题地使用或任何其他方法访问。

当它们不在您的记忆中时,可能会出现一些限制,但它们不一定是不可访问的。一些可能有问题也可能没有问题的情况:

  • 如果文件被您的操作系统加密,则从磁盘读取
  • 资源在远程服务器上,您需要通过互联网进行通信
  • 您的数据在 GPU 上或需要 GPU 进行处理

如果您didReceiveRemoteNotification已经被呼叫,那么您应该很少或没有问题。但通知不一定会触发此方法。通知的有效负载应该已经包含徽章计数,并且您的操作系统应该能够正确显示徽章,而不是总是向其添加值。

应用程序可能不只是在后台。它可能会被暂停甚至终止。您的应用程序可能会从通知中唤醒,在这种情况下您不能期望didReceiveRemoteNotification被调用。即使是你也不能指望你的记忆中还有以前电话的任何信息;由于您的应用程序刚刚重新启动,因此之前运行的内存中没有任何内容。


推荐阅读