在设备android上反应本机UI冻结

时间:2020-04-08 23:37:23

标签: android react-native user-interface device freeze

我是本机开发人员的新手,但我遇到了一个问题,我的应用程序调用了一些本机模块并根据这些模块的响应来更新UI,但是一段时间后UI冻结,我无法更改选项卡或按钮等等

它在模拟器上运行良好,只有在安装到设备上时才会发生

这是反应中的常见问题吗?我应该看什么?也许我犯了一些常见错误

谢谢

1 个答案:

答案 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开销任务(在本例中为从本机模块调用)在后台执行。这使我的应用程序变得流畅,并且没有冻结任何用户界面。

谢谢。