ios - iMessage 应用程序不断重新启动

标签 ios objective-c swift imessage imessage-extension

每当我在 iMessage 应用程序外部滑动以打开另一个 iMessage 应用程序,然后通过向后滑动返回到我的 iMessage 应用程序时,我的 iMessage 应用程序都会再次加载。

甚至 MessagesViewControllerviewDidLoad 也会再次被调用。

我在 MessagesViewController 中的代码看起来像-

class MessagesViewController: MSMessagesAppViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        openSuitableController()
    }

    override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
        removeAllChildViewControllers()
    }

    override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
        openSuitableController()
    }
}

openSuitableController中,我只是将一个childViewController添加到MessagesViewController

由于应用程序再次启动,collectionView 被加载并滚动到顶部,导致闪烁。

如果您需要更多信息,请发表评论。

PS:我添加了 Objective-C 标签,因为我不认为这个问题是由于特定语言造成的。

最佳答案

我认为这是不可避免的,并且这正是 iMessage 管理其托管的 iMessage 应用程序的方式。即:当您滑出时,iMessage 框架会关闭您的应用程序,并启动您滑入的下一个应用程序。 iOS 11 及之前的版本就是如此,当然,将来可能会发生变化。

iMessage 有一种相当复杂的方式来呈现您的 UI,将其嵌入到自己的沙盒容器 View Controller 层次结构中,这是为了确保 iMessage 本身与私有(private)聊天数据和您的应用程序之间的安全信任边界。因此,与应用程序自行启动相比,呈现应用程序的开销更大,我的猜测是应用程序像这样重新启动,以最大限度地减少资源使用并保护 iMessage 免于耗尽其所需的资源。

值得让您的应用程序启动尽可能快(例如通过限制动态库加载时间),并记住您的初始内容在交换为存储的快照时的外观。

我认为,最大限度地减少应用程序启动和停止时完成的工作非常重要,以便在应用程序之间实现最平滑的转换。

当您从一个应用程序滑出到另一个应用程序时,iMessage 会生成前一个 UI 状态的快照图像,然后在滑回您的应用程序时,它会在您的应用程序进行初始化时显示该快照。

因此,仔细查看快照过程并尝试确保您的初始 UI 演示能够很好地从 iMessage 框架生成的快照过渡是值得的。

关于ios - iMessage 应用程序不断重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46784253/

相关文章:

javascript - js 适用于 ios 10 但不适用于 9?

ios - iphone 版 flite tts 中的完美音高、方差和速度值是多少

iphone - 打开和关闭 NSLogs 的正则表达式?

ios - 将 NSString 转换为字符数组

objective-c - 如何从网络启动 native OSX 应用程序(并传递参数)?

ios - Firebase - for循环回调中嵌套observeSingleEvent查询太多次更新

swift - SceneKit – DAE 文件格式的动画

ios - iOS 设备越狱后是否安全?

ios - 如何在 swift 3 中获取类属性标签?

ios - 身份验证后在 iOS 中使用 DynamoDB