内存管理问题android

时间:2016-06-18 13:17:57

标签: android facebook caching memory memory-management

我有3个问题

  
      
  1. 当我们调用recyclelerview.setadapter(new Adapter)时,它对android的内存有多大影响;代替   notifydatasetchanged();

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

  4.   
  5. 与第二个问题类似。我如何只加载我在屏幕上显示的问题,一次只能在内存中显示?

  6.   

P.S我不包括代码,因为我认为没有必要,因为我没有做任何与普通回收者视图不同的事情

1 个答案:

答案 0 :(得分:1)

RecyclerView中设置新适配器与仅调用notifyDataSetChanged()之间的区别很大,因为当您调用set new Adapter时,应用必须重新创建其所有视图持有者并绑定需要一遍又一遍。 RecyclerView可能就是这样做的,并且做agian工作是不必要的和任务。特别是如果每​​次收到新数据时调用它,这对你的Android应用程序来说将是很多工作。 RecyclerView的美丽在于它的名字。它通过在视图滚动屏幕时重复使用(或回收)视图来减少应用程序的重载量。即使你有10000个复杂的视图,由于RecyclerView的实现,应用程序仍然可以很好地工作。所有观点永远不会记忆长久。

对于第二个问题,您可以查看RecyclerView中的位置是否实际可见。如果您检查数据集中的最后一项是否可见,则可以发送网络请求以获取更多数据。 facebook可能会这样做。 Quora和Tumblr等其他网站也会这样做,因为当您到达Feed的底部时,它通常会重新加载并将新数据添加到数据集中。如果您想获得更好的体验,可以将阈值提升到最后一个视图,但在此之前有一些视图,因此看起来好像Feed停止并重新加载。它可以创建无尽的滚动效果。实现取决于您,无论哪种方式,您可能必须检查RecyclerView的滚动状态,并且肯定会调用notifyDataSetChanged(),或者更好地调用它的变体。

最后一个问题可能已由RecyclerView处理。这取决于您的数据,但ViewHolders应该以一种内存中没有很多视图的方式进行回收。