因为RN中的图片在一个独立的线程中进行本地解码。
图片解码可能需要超过一帧的时间。这是网页上主线程处理解码是导致帧率下降的主要原因之一。
因此,RN会在组件中使用的图像进行解码时显示占位符,然后在每个单独的图像加载后分别显示它们(而不是等待然后在准备就绪时同时显示整个组件)。
注意
在开发/调试和“真实”生产环境中,图片的加载方式是不同的。在本地调试期间,图像将通过打包服务器上的HTTP进行加载,而在生产中,它们将与应用程序捆绑在一起。
解决方法
尝试在设备上进行生产版本构建(完整发布构建),以查看是否实际存在问题或仅为开发模式的副作用。
或者尝试在此问题中提供的解决方法。
componentWillMount() {
this.image = (<Image source={require('./background.png')} />);
}
并且在你的 render()
函数中:
render() {
return(
<View>
{this.image}
</View>
);
}
loadAssetsAsync = async() => { return Promise.all([ Asset.loadAsync([ Images.welcomeBg, Images.workingBg, Images.logo, ]), Font.loadAsync({ 'AvenirLTCom-Light': require('@assets/fonts/AvenirLTCom-Light.ttf'), 'AvenirLTCom-Black': require('@assets/fonts/AvenirLTCom-Black.ttf'), }) ]) }
- Hoai TruongcomponentWillMount
中加载图片,并将它们传递给实际使用它们的组件,但是在加载时仍然会出现图像卡顿的情况。 - DennyHiu