【问题标题】:How to understand that shows LeakCanary?如何理解显示 LeakCanary?
【发布时间】:2017-06-14 02:21:57
【问题描述】:

我已安装在您的 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

【问题讨论】:

  • 我得到了同样的结果,你有没有弄清楚泄漏是从哪里来的?
  • @Drew 不,我不明白。

标签: java android memory-leaks leakcanary


【解决方案1】:

您正在经历泄漏,因为InterstitialAd 保存了对活动的引用。你应该替换:

mInterstitialAd = new InterstitialAd(this);

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

有关更多信息,请参阅my answer on a similar question

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多