使用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"
}
]
顶部建议的六个对象。如上
任何帮助将不胜感激。
谢谢
答案 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),它将按您想要的方式运行。