【问题标题】:Android RecyclerView reloading the activity to update data vs notifyDataSetChanged efficiency?Android RecyclerView 重新加载活动以更新数据 vs notifyDataSetChanged 效率?
【发布时间】:2019-07-12 04:22:43
【问题描述】:

我有一个在 onCreate 中调用 API 并使用产品名称、当前库存和 EditText 填充 RecyclerView 的活动,以便为每个产品插入一个值。

然后,您可以点击活动顶部的添加或减去按钮,所有具有插入值的产品都将通过 API 根据给定值在数据库中更新其库存。

我不会将屏幕上的库存值传递给 API(因为其他用户可能同时更改了它),只是插入的值、产品 ID 以及是否增加/减少数据库值。

目前,在我发送更新请求并成功后,我调用finish() 并重新加载活动以获取更新的数据。

我想知道在更新请求之后对数据进行 API 调用然后只更新 RecyclerView 是否会更好,这几乎是 onCreate 的重复代码,但会阻止重新加载活动。

是否有人对此与重新加载活动的效率有任何见解?似乎重新加载将是效率更低的选择,但我不太确定。

【问题讨论】:

  • 重新加载活动永远不是解决方案。相反,您应该修改适配器的数据集并在适配器上调用 notify 的期望变体。您也可以使用DiffUtils 以获得更好的性能。

标签: android performance android-recyclerview


【解决方案1】:

假设在你的 onCreate 方法中你有这样的东西:

onCreate() {
  setContentView(xx);
  callApiGetDataAndSetDataToRecyclerView();
}

如果是这样,请尝试更改如下代码after I send the update request and it is successful

doAfterUpdateRequestSuccessful() {
  List<Object> latestData = callApiGetData() // this should not be in the ui thread, I believe you are clear about it but just want to repeat
  recyclerViewAdapter.setData(latestData);
  recyclerViewAdapter.notifyDataSetChanged();
}

然后您的回收站视图将更新为最新数据。

就像@ADM 的评论,finishrecreate 一样,该活动永远不是更新回收站视图的解决方案,用户体验将非常非常糟糕。

【讨论】:

  • 我向我的适配器添加了一个方法来替换数据集并调用 notifyDataSetChanged(),现在我根本没有重新加载活动。干杯
【解决方案2】:

重新加载活动不是那么有效。相反,您应该将获取数据和渲染逻辑移动到一个独立的方法中,并在每次您想要刷新渲染数据时从 onCreate 调用此方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多