带有平面列表和每行一个视频的 Expo 应用程序。(参见 TikTok)
- 世博 SDK 40.0.0
- Flatlist - 优化 (shouldComponentUpdate) + 查看道具,最多同时渲染 2 行。没有在视野中的线被干净地卸载。只有视野中的视频运行,第二个暂停。
- 世博-AV
- Google-Firebase Cloudstorage:视频也由应用生成和上传。
问题:最迟在渲染第 4 个视频后,应用程序在 Android 上遇到内存问题。从一开始就在 IOS 设备上没有问题。错误消息/警告:VirtualizedList:您有一个更新缓慢的大列表....之后,视频很长一段时间都没有加载,只有几分钟后两个要渲染的视频才会再次出现.
组件结构:
VideoStream - React.Component => 所有可用并存储在 Redux 存储中的数据。
Flatlist => 仅通过了 7 条记录,请参阅 flatlist 道具
项目 => 通过渲染项目
VideoItem - React.Component> => 包括。手势手柄,背景
可触摸不透明度>
视频 => 世博会-AV
<View style={styles.container}> <FlatList snapToAlignment={'start'} snapToInterval={screenHeight} decelerationRate={'fast'} scrollEventThrottle={250} pagingEnabled showsVerticalScrollIndicator={false} vertical={true} scrollEnabled={true} style={{flex: 1}} data={videos} renderItem={this.renderItem} keyExtractor={this.keyExtractor} onViewableItemsChanged={this.onViewableItemsChanged} initialNumToRender={0} maxToRenderPerBatch={1} windowSize={2} getItemLayout={this.getItemLayout} onEndReached={this.onEndReached} onEndReachedThreshold={0.1} viewabilityConfig={viewabilityConfig} removeClippedSubviews={true} /> </View> viewabilityConfig = { itemVisiblePercentThreshold: 75, };
测试:
- Stream 和 loadAsync => 相同的行为。
- 替代公共数据源 => 相同的行为
- 没有要加载的视频 => 没问题
假设:
- Android - 和 Expo-AV:自 2018 年左右以来,在没有问题的 IOS 上经常发现堆栈,不幸的是,基于 Expo 播放器和 Android 之间的连接,到目前为止还没有解决方案
- 上传 - 哪些错误/优化是可能的
- 下载 - 哪些错误/优化是可能的?
经过 10 天的优化和寻找原因,现在我寻求帮助.... 非常感谢。