iMessage应用程序不断重启

时间:2017-10-17 07:00:52

标签: ios objective-c swift imessage imessage-extension

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

即使viewDidLoad MessagesViewController再次被调用。

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代码,因为我觉得这个问题不是由于特定的语言造成的。

1 个答案:

答案 0 :(得分:0)

我认为这是不可避免的,只是iMessage管理其托管的iMessage应用程序的方式。即:iMessage框架会在您向外滑动时关闭您的应用程序并启动您刷入的下一个应用程序。对于iOS 11和之前的版本都是如此,当然它可能在未来发生变化。

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

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

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

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

因此,仔细查看快照流程并尝试确保您的初始UI表示将从iMessage框架创建的快照中转换得很好。