java - 如何在android recyclerview上管理太多项目的内存

标签 java android android-recyclerview android-memory

我正在开发一个 Android 社​​交媒体类型应用程序,其中有多个选项卡 Activity 。选项卡是使用 viewpager 的 fragment 。我有一个带有回收器 View 的主屏幕。帖子上有图片。我在发布回收器 View 时遇到内存问题。如果有帮助的话,我正在使用 firebase 作为数据库。为了加载 ImageView ,我正在使用 glide,并且正在执行磁盘缓存并跳过内存缓存。

我遇到的问题是

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

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

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

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

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

最佳答案

  1. Glide 缓存图像
  2. 加载多个后检查分页库
  3. 当移动到详细信息 fragment 并清除主页 fragment 的 reacyclerview 时,我不建议这样做,因为下次用户切换到主页选项卡时,用户将不会保存他之前留下的先前状态。

关于java - 如何在android recyclerview上管理太多项目的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57666108/

相关文章:

android - 如何使用 Android 中的歌曲自动执行 Seekbar 移动?

android - CardView 是 wrap_content 列表项而不是 match_parent

android - 如何在android studio项目中导入最新的Paypal sdk?

android - 在不使用库的情况下滑动(滑动以关闭)时在 recyclerview 项目下创建按钮和按钮单击

java - JPA 和 Postgres generate_series

java - hashcode() 和 equals() 在 java 中的工作?

android - 检查服务是否已经在运行

android - 将文件从程序共享到 PC

java - 集群环境下如何管理spring cache

java.nio.SocketChannel 始终返回相同的数据