java - 如何理解显示LeakCanary?

标签 java android memory-leaks leakcanary

我已经在你的 proetk LeackCanary 库中安装了。它发现内存泄漏,并给我带来了可能需要它的信息,但我无法理解它,因为我在类里面没有这样的做法。如何准确理解错误出在哪里以及如何修复?谢谢。

公共(public)最终类 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

最佳答案

您遇到泄漏是因为 InterstitialAd 保存了对 Activity 的引用。你应该替换:

mInterstitialAd = new InterstitialAd(this);

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

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

关于java - 如何理解显示LeakCanary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910296/

相关文章:

c++ - 重载运算符中的内存泄漏 =

java - 编写二叉搜索树的插入方法

java - 在 Java 中将二维整数数组压入堆栈

java - Pojo 到 DTO - Bean 映射

android - doInBackground 方法必须返回 JSONObject 类型的结果

android - 接受邀请后 Play 管理中心错误 403

java - 为什么停止 MediaRecorder 时会出现 IllegalStateException?

ios - UITabBarItem 内存泄漏

java - 无法读取程序中的 Java 文件

c++ - 使用 GLM 时内存泄漏