我是本机开发人员的新手,但我遇到了一个问题,我的应用程序调用了一些本机模块并根据这些模块的响应来更新UI,但是一段时间后UI冻结,我无法更改选项卡或按钮等等
它在模拟器上运行良好,只有在安装到设备上时才会发生
这是反应中的常见问题吗?我应该看什么?也许我犯了一些常见错误
谢谢
答案 0 :(得分:0)
首先,我想描述一下我在React Native( v0.63.2 )中遇到的类似问题以及解决该问题的解决方案。
问题:
我有一个简单的React Native应用程序,其中Scroll View作为主视图,还有许多其他子视图,其中包含按钮,Text等。在 componentDidMount()中,我执行了大多数本机模块调用并设置每个API调用的状态。因此,在获取数据后的某个时间之后,UI元素开始冻结,并且我不再能够单击按钮,而是能够在视图中滚动。滚动视图起作用,因为它位于主线程上。有关滚动视图性能的更多信息,请参阅ScrollView-Performance。
解决方案:
在使用Android Studio中的本机调试器进行彻底调试后,@ReactMethod
的本机模块java端创建了多个线程,并且主线程的开销很大,看起来主JS线程变成了更新UI框架时速度很慢,并在某些时候中断,从而导致UI冻结。
感谢 V8运行时, 我能够使用名为react-native-v8的开源软件包,该软件包更容易将V8运行时集成到React Native应用程序中。目前,此软件包仅支持Android。
V8 JS引擎同时在后台运行任务,因此使任何UI开销任务(在本例中为从本机模块调用)在后台执行。这使我的应用程序变得流畅,并且没有冻结任何用户界面。
谢谢。