在Android上反应本机Flatlist崩溃

时间:2019-04-09 03:37:02

标签: android react-native react-native-flatlist

使用Flatlist会导致应用在Android上崩溃。我的代码是,

<ScrollView style={{ flex:1 }}>
  <View style={{
              justifyContent: "space-around"
            }}
          >
            <FlatList
              data={this.state.topSuggested}
              keyExtractor={(item, index) => index.toString()}
              numColumns={3}
              renderItem={({ item, index }) => (
                <TopTileCard
                  id={item.dish_type_id}
                  name={item.name}
                  image={item.image}
                  pieces={item["COUNT(restaurant_items.id)"]}
                  onCardClick={this.topItemClick}
                  key={index}
                />
              )}
            />
          </View>
</ScrollView>

它只能渲染6次,但是当删除上述FlatList时,应用程序运行正常,

关于可能发生这种情况的任何想法,我曾经FlatList在应用程序的其他屏幕上渲染200多个项目,但这会导致应用程序崩溃。

当我在其他设备上运行该应用程序并检查logcat时,我发现崩溃是由于内存不足引起的。出于某种原因,渲染此页面会占用大约800 mb的内存。

topSuggested的样本

[
  {
    COUNT(restaurant_items.id):7,
    dish_type_id:21,
    image:null,
    name:"Cheese Toast",
    type:"top"
  },
  {
    COUNT(restaurant_items.id):6,
    dish_type_id:548,
    image:null,
    name:"Chicken Biryani",
    type:"top"
  }

]

顶部建议的六个对象。如上

任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

我在Flatlist上遇到了类似的问题,它试图在一些较旧的android版本上渲染大量项目。在FlatList中添加initialNumToRender道具对我来说很有效,请尝试将其设置为一个非常低的数字(例如1或2)。这只是意味着用户可以在屏幕上看到更多的项目,我认为还可以。

或者,您可以删除不需要的ScrollView。

答案 1 :(得分:0)

尝试注意多少项(平均在不同设备上)后崩溃。然后定义每个周期的MAXLIMIT并设置一个计数器进行测量,当计数器达到MAXLIMIT时,只需清空数据并重新填充,将页脚处的LOADMORE按钮设置为Handle Refresh。

如果您希望将其高级升级到其他设备,请从用户那里获得LIMIT并对其进行动态设置以提高性能(例如,对于2 Gb ram的MAXLIMIT为50,对于6 Gb ram的为200),它将按您想要的方式运行。