Я установил в вашу библиотеку LeetCanary proetk. Он обнаружил утечку памяти и дал мне информацию о ней, но я не могу ее понять, потому что у меня нет такой практики в классе. Как точно понять, где ошибка и как ее исправить? Спасибо.
Public final class Activity extends 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
Вы испытываете утечку, потому что InterstitialAd
сохраняет ссылку на активность. Вы должны заменить:
mInterstitialAd = new InterstitialAd(this);
с
mInterstitialAd = new InterstitialAd(this.getApplicationContext());
Для получения дополнительной информации см. Мой ответ по аналогичному вопросу .