Как понять, что показывает LeakCanary?
Я установил в вашу Proetk библиотеку LeackCanary. Он обнаружил утечку памяти и принес мне информацию о том, что ее можно запросить, но я не могу ее понять, потому что у меня нет такой практики в классе. Как понять, где именно ошибка и как ее исправить? Спасибо.
public final class Activity расширяет AppCompatActivity {
InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fci);
getWindow().setBackgroundDrawable(null);
final ImageButton btn_pas = (ImageButton) findViewById(R.id.btn_pas);
Glide.with(getApplicationContext()).load(R.drawable.fci_2).placeholder(R.color.white).into(btn_pas);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-...");
requestNewInterstitial();
}
@Override
public void onBackPressed() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
super.onBackPressed();
} else {
super.onBackPressed();
}
requestNewInterstitial();
}
private final void requestNewInterstitial() {
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd.loadAd(adRequest);
}
public final void pas(View view) {
Intent intent = new Intent(Activity.this, pas.class);
startActivity(intent);
}
}
Я не могу прикрепить скриншот, поэтому я опишу пишет LeakCanary.
static hk.o
references ht.a
leaks Activity instance
1 ответ
Вы испытываете утечку, потому что InterstitialAd
сохраняет ссылку на активность. Вы должны заменить:
mInterstitialAd = new InterstitialAd(this);
с
mInterstitialAd = new InterstitialAd(this.getApplicationContext());
Для получения дополнительной информации см. Мой ответ на аналогичный вопрос.