2017-01-28 12 views
7

Я установил в вашей библиотеке LeetCanary proetk. Он обнаружил утечку памяти и дал мне информацию о ней, но я не могу ее понять, потому что у меня нет такой практики в классе. Как точно понять, где ошибка и как ее исправить? Спасибо.Как понять, что показывает LeakCanary?

общественный конечный класс активности расширяет 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 
+0

Я получаю то же самое, вы когда-нибудь выяснили, откуда вытекала утечка? –

+0

@ Дрю Нет, я не понимал. – Denis

ответ

0

Вы испытываете утечку, потому что InterstitialAd сохраняет ссылку на активность. Вы должны заменить:

mInterstitialAd = new InterstitialAd(this); 

с

mInterstitialAd = new InterstitialAd(this.getApplicationContext()); 

Для немного дополнительной информации см my answer on a similar question.