我用碎片实现活动。在每个片段中,我实现了RecyclerView。在每第n行之后的RecyclerView中,我从已经持有视图的单身人员类中附加了静态视图。在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广告。
如果我想在应用程序中保留一些半小时的数据而不泄漏活动实例的内存,我该怎么办? –
@WakilAhmad:保留*数据*,而不是UI小部件,活动等。简单的旧Java对象(POJO)很好,除了大小问题。 – CommonsWare
我想持有Facebook原生广告。这是对的吗?如果不是,请告诉如何将原生广告缓存一小时? –