2014-10-28 119 views
0

使用MAT和hprof转储文件,我发现在我的应用程序中有两个主要活动实例,当我旋转屏幕时。注意包的名字已被删节:)Google AdMob Interstital Ad导致内存泄漏

enter image description here

这是的MainActivity $ 1

enter image description here

MainActivity $ 1

enter image description here

类引用传入的对象。当我显示GC根源不包括弱引用的路径es在InterstitialAd类我得到以下输出。

enter image description here

我的统治或根方面的理解是,参考在InterstitialAd这是我的目的是防止这种垃圾收集。我不知道什么是智商或智商。

这是我的插页式广告实施。请注意,我的应用只有一项活动。 我将显示与InterstitialAd相关的部分,以便清晰和简洁。 主要活动

private InterstitialAd interstitialAd; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     interstitialAd = new InterstitialAd(this); 
     interstitialAd.setAdUnitId(getResources().getString(R.string.interstitial_ad_unit_id)); 
     interstitialAd.setAdListener(new AdListener() 
     { 
      @Override 
      public void onAdLoaded() 
      { 
       if(isTheAppInFrontOfTheUser) 
       { 
        interstitialAd.show(); 
       } 


      } 

      @Override 
      public void onAdClosed() 
      { 
       interstitialAd = null; 
       SharedPreferences userPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 
       SharedPreferences.Editor editor = userPrefs.edit(); 
       editor.putLong("dateTimeOfLastInterstitialAd", System.currentTimeMillis()); 
       editor.commit(); 


      } 
     }); 
} 

这就是所谓的请求在InterstitialAd

public void showInterstitialAd() 
    { 

      AdRequest adRequest = new AdRequest.Builder() 
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
        .build(); 
      interstitialAd.loadAd(adRequest); 


    } 

我在Destroy方法

@Override 
    protected void onDestroy() 
    { 
     interstitialAd = null; 
     super.onDestroy(); 
    } 
+0

请帮助,我不知道我的插页式广告实施导致它泄漏的问题! – user3364963 2014-10-28 15:02:32

回答

0

我只能看见MainActivity的单个实例在登录。 0x41c7af8。另一个在哪里?

注意ACRA ErrorReporter包含对lastActivityCreated的WeakReference。