2016-06-18 35 views
0

我有3个问题内存管理问题的android

  1. 多少它影响Android的记忆,当我们调用recyclerview.setadapter(新适配器);而不是 notifydatasetchanged();

  2. 在Android上使用Facebook应用程序时,我明白如果我们向下滚动一整天,Facebook的新闻提要不会结束。 但Facebook并没有立即加载所有的新闻提要。当我们向下滚动时,它会一点一点地加载。所以我的问题是,我有 做了一个应用程序,其中我加载用户在我的 recyclerview中询问的问题。但随着时间的推移,问题的数量增加,我仍然显示所有的问题,其中 收费的设备的内存和应用程序开始崩溃,所以我如何 加载一些问题和用户卷轴下 。我加载下面的问题就像facebook一样 ?

  3. 与第二个问题类似。我如何只加载我一次在屏幕上显示的问题?

PS我不包括代码,因为我觉得就没有必要,因为我什么也没有做太大的不同比普通recyclerview

回答

1

RecyclerView设置新的适配器之间的区别只需拨打电话notifyDataSetChanged()即可,因为当您调用设置新的适配器时,应用程序将不得不重新创建其所有视图持有者,并重新绑定所需的视图持有者。 RecyclerView可能只是做到了这一点,并且做好工作是不必要和任务的。特别是如果每​​次你收到新的数据时都会调用它,这对你的android应用程序来说将会有很多工作。 RecyclerView的美丽在于它的名字。它通过在屏幕上滚动屏幕时重新使用(或循环)视图来减少应用程序的过载量。即使您有10000个复杂的视图,由于RecyclerView的实施,该应用程序仍可以很好地工作。所有的观点永远不会记忆。

对于第二个问题,您可以检查RecyclerView中的位置是否真的可见。如果您检查数据集中最后一项是否可见,那么您可以发送网络请求以获取更多数据。 Facebook的方式可能做到这一点。像Quora和Tumblr这样的其他网站也会这样做,当您到达Feed的底部时,它通常会重新加载并将新数据添加到数据集中。如果你想获得更好的体验,你可以将阈值提高到最后一个视图,但在这之前有一些视图,所以它永远不会像停止和重新加载。它可以创建无尽的滚动效果。实施取决于您,无论哪种方式,您可能都需要检查RecyclerView的滚动状态,并且绝对要拨打notifyDataSetChanged()或者更好的变体。

最后一个问题可能已由RecyclerView照顾。这取决于你的数据,但ViewHolders应该以一种你没有多少内存的方式回收。

+0

谢谢你的答案。不是100%满意:但好的回答:)。如果我没有得到更好的答案,我可能会标记你的预期,也许:) –

+0

和顺便说一句,当我使用notifydatasetchanged而不是新的适配器内存增加不是很多,为什么? –

+0

@SyedMuhammadOan它取决于你有多少数据。我正在考虑使用大量数据的复杂视图范围(例如包含图像的数据和大量文本以及RecyclerView必须处理的许多不同组件)。总的来说,调用新的适配器在'notifydatasethchanged()'时似乎效率低下。根据您的观点和数据,这可能不会是一个巨大的增加,但即使是轻微的损害您的应用程序。一个设备的内存容量可以是2GB或者小于1GB。无论哪种方式,大量的资源去Android资源和屏幕留下你的应用程序 –