Android Tv Leanback 加载图标图像以减少内存占用的最佳位置
Android Tv Leanback best place to load icon images to reduce memory footprint
我已经使用 Leanback 为 Android 电视制作了一个应用程序,我使用的是 BrowseSupportFragment,我的项目由实现 Presenter class 的 class CardPresenter 呈现。我正在为图标加载 onBindViewHolder 方法中的图像。但是它加载太多图像到内存中,我通过 Logcat 检查加载的图像总数太多(基本上加载了大约 54 行,每行有 10-12 张卡片)。这导致应用程序中的 gc 暂停。我想要的是只加载可见图像。尝试使用 Presenter class 中的 onViewAttachedToWindow 方法,但是 onBindViewHolder 和 onViewAttachedToWindow 方法似乎被调用了相同的次数。我想做的是延迟加载图像,当列表行滚动时,尝试搜索很多但无法得到正确的答案,有人可以帮助我吗?
onBindViewHolder 是触发图像加载的正确位置。当您的布局膨胀时,您应该看到 onBindViewHolder 为所有可见项目调用,有时根据截止点为下一个项目提供缓冲区。如果您看到的是 onBindViewHolder 被调用的次数远远超过合理的次数(例如,您在屏幕上看到 20 个项目,但它被调用了 100 次),那么您应该确保您的布局具有设定的大小。
例如,如果您要显示卡片并且卡片的宽度在图片加载后才设置,则您的宽度实际上可能为 0,因此该行中的每张卡片都已绑定,从而触发您的图片请求. ImageCardView 具有设置 LayoutParams 的 setMainImageDimensions 辅助方法,因此您可以在 onCreateViewHolder(如果所有项的大小相同)或 onBindViewHolder(如果大小取决于项)中调用它。
我已经使用 Leanback 为 Android 电视制作了一个应用程序,我使用的是 BrowseSupportFragment,我的项目由实现 Presenter class 的 class CardPresenter 呈现。我正在为图标加载 onBindViewHolder 方法中的图像。但是它加载太多图像到内存中,我通过 Logcat 检查加载的图像总数太多(基本上加载了大约 54 行,每行有 10-12 张卡片)。这导致应用程序中的 gc 暂停。我想要的是只加载可见图像。尝试使用 Presenter class 中的 onViewAttachedToWindow 方法,但是 onBindViewHolder 和 onViewAttachedToWindow 方法似乎被调用了相同的次数。我想做的是延迟加载图像,当列表行滚动时,尝试搜索很多但无法得到正确的答案,有人可以帮助我吗?
onBindViewHolder 是触发图像加载的正确位置。当您的布局膨胀时,您应该看到 onBindViewHolder 为所有可见项目调用,有时根据截止点为下一个项目提供缓冲区。如果您看到的是 onBindViewHolder 被调用的次数远远超过合理的次数(例如,您在屏幕上看到 20 个项目,但它被调用了 100 次),那么您应该确保您的布局具有设定的大小。
例如,如果您要显示卡片并且卡片的宽度在图片加载后才设置,则您的宽度实际上可能为 0,因此该行中的每张卡片都已绑定,从而触发您的图片请求. ImageCardView 具有设置 LayoutParams 的 setMainImageDimensions 辅助方法,因此您可以在 onCreateViewHolder(如果所有项的大小相同)或 onBindViewHolder(如果大小取决于项)中调用它。