我用碎片實現活動。在每個片段中,我實現了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原生廣告。這是對的嗎?如果不是,請告訴如何將原生廣告緩存一小時? –