我用片段实现活动。在每个片段中,我都实现了RecyclerView。在每隔第n行的RecyclerView中,我附加了已经持有视图的My singleton类的静态视图。在onDestroy活动中,我从GridLayoutManager中删除所有视图,并从RecyclerView中删除所有视图并清除适配器对象。完成所有操作后,我也清除了我的单例类中的静态视图。但LeakCanary检测到该特定行的活动内存泄漏。如何避免内存泄漏以及如何删除任何持有静态上下文的视图?
int adPosition = FacebookAdCenter.getInstance().getAdPosition(position);
View adView;
if (adPosition >= 0) {
adView = FacebookAdCenter.getInstance().getNativeAdViewWithAdPosition(adPosition);
} else {
adView = null;
}
if (adView == null) {
adView = FacebookAdCenter.getInstance().getNativeAdView(position);
if (adView.getParent() != null) {
((ViewGroup) adView.getParent()).removeView(adView);
}
itemView.addView(adView);
} else {
if (adView.getParent() != null) {
((ViewGroup) adView.getParent()).removeView(adView);
}
itemView.addView(adView);
}
实际上我想缓存Facebook广告,以便在一小时内重复使用它们。但不幸的是,我仍然没有成功。如果我使用静态引用来存储广告,那么就会出现内存泄漏。我不知道其他方法可以正确缓存Facebook广告。
答案 0 :(得分:0)
在每个第n个项目行视图后的RecyclerView中,我附加了已经持有视图的My singleton类的静态视图。
不要这样做。
如何避免内存泄漏
不要引用static
字段中的观看次数。
在Java中,可变static
字段(即非常量)是代码气味。在Android中,我们可以容忍它们,但它们主要用于缓存或调解组件之间的通信。组件(活动)之间无法重用View
。