如何解决在iOS上从后台重新激活后,Flutter应用程序UI被冻结
我有一个使用Flutter开发的应用程序,从后台激活时我在IOS上遇到了一些问题。
已启用在IOS上使用位置背景模式。它可以在后台正常运行,即使几天,也可以完成它所要做的事情。但是,当我在后台工作了更长的时间(大约一天或更长时间)后打开应用程序时,UI被冻结了!请注意,如果我在几个小时后执行此操作,就可以了,问题会在较长一段时间后出现。
Flutter版本: [✓] Flutter(在Mac OS X 10.15.5 19F101上为Channel稳定,版本为1.20.1,语言环境为hu-HU)
该如何解决?我应该在Flutter中以某种方式重新初始化UI吗?还是从本地做任何事情?
非常感谢,我们非常感谢您的帮助!
解决方法
确保进入后台后以某种方式缓存了应用程序的状态。较长时间后,它可能不再在内存中,如果没有它,您的UI将无法呈现。
该问题似乎与后台位置获取无关-请尝试通过在启用了调试功能的真实设备上运行您的应用程序来解决该问题。将其切换到后台并打开一些内存消耗大的应用程序以强制终止应用程序。打开应用程序并检查日志后,应该有某种指示来指示Flutter UI冻结的原因。
,上次我在ios和android上都遇到此问题时,实际上与状态管理器provider
包有关。
当应用程序进入后台并刷新提供程序本身时,我最终通过将数据保存在sqlite
中来进行管理,并在每次从任务管理器打开应用程序时重新启动状态。
真正的解决方案可能涉及diff元素。我在寻找清除此bug时添加并更正了这些内容。但是使它工作的东西(我测试了大约4-5小时,并且完全没有冻结)是关于dispatch_queue的。
应用暂停后,整个过程将被冻结。您可以指望恢复过程,就好像恢复后什么都没有发生一样。应用程序的GCD逻辑队列不会消失,它们会保留在内存中。 GCD在您的进程中创建的用于服务队列的线程将恢复原位,好像什么也没发生。
因此您的解释不正确:暂停前GCD队列中存在的任务在恢复后不会消失。他们从来没有离开过。他们只是被暂停了。
有关更多信息,请参阅inactive/background/suspended states in iOS?
,将Flutter更新到1.20.3后,此错误已修复!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。