【问题标题】:How to manage memory with too many items on android recycleview如何在android recyclerview上管理太多项目的内存
【发布时间】:2019-08-26 23:47:37
【问题描述】:

我正在开发一个 android 社​​交媒体类型的应用程序,其中我有一个多选项卡活动。选项卡是使用 viewpager 的片段。我有一个带有回收站视图的主屏幕。帖子上有图片。我对 post 的 recyclerview 有内存问题。如果有帮助,我将使用 firebase 作为数据库。要加载图像视图,我正在使用 glide,我正在做磁盘缓存并跳过内存缓存。

我遇到的问题是

  1. 当加载太多帖子时,recyclerview 会变得缓慢和滞后(我知道还有其他帖子与此相关,但真的找不到任何有用的东西)。

  2. 当我单击帖子中的用户名时,会启动一个新的个人资料活动,其中还包含该用户的所有帖子,我正在尝试找到一种清除主页选项卡 recyclerview 内存的方法,但不知道如何去做。

为了解决第一个问题,我设置了一个 onscrolllistner,每当您接近帖子列表的末尾时,它就会加载 10 个新帖子。回收器视图适配器当前最初加载 20 个项目,然后以此类推。但我不确定如何以有效的方式清除旧帖子,因为我希望用户能够向上滚动。

为了解决第二个问题,在主屏幕片段中,当我启动新活动时,会调用 onPause() 函数。在 onpause() 函数中,我尝试将列表设置为空,recyclerview 适配器为空,recyclerview 为空,但没有任何效果。在 android profiler 工具中,我看到我正在使用 200 mb 内存,当我启动新活动时,它又增加了 100 mb 左右。我尝试了手动垃圾收集,但它也不起作用。具体来说,本机内存在分析器中跳跃。我已经测试并确保这只是因为 recyclerview 中的图像。

我不知道为什么当我将 recyclerview、adapter 和帖子列表设置为 null 时,为什么帖子中的图像仍然保留在内存中。

【问题讨论】:

  • 您可以在适配器类中尝试onViewRecycled。这是为了记忆清晰,也许它会对你有所帮助。

标签: java android android-recyclerview android-memory


【解决方案1】:
  1. Glide 缓存图片
  2. 加载多个后检查分页库
  3. 当移动到细节片段并清除主页片段的recyclerview时,我不建议这样做,因为下次用户切换到主页选项卡时,用户将不会保存他之前离开的先前状态。

【讨论】:

  • 感谢您的回复。对于 1. 我知道 glide 缓存图像并且它具有清除内存的功能,尝试过但没有帮助。 2.我没有想到这一点。会尝试,但我会不会遇到同样的问题,即帖子太多,或者它会让我控制视图中有多少帖子? 3.是的,我考虑过,但我认为有一种方法可以保存 recyclerview 状态或类似的东西?除了我更迷茫为什么将适配器和recyclerview设置为null没有清理内存?
  • 分页库就像加载大量帖子的魅力一样。
  • 很高兴它帮助了你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多