我在我正在构建的Android应用中使用Facebook的Audience Network。我的onCreate方法代码是,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
this.facebookAdOneLayout = (RelativeLayout) findViewById(R.id.facebook_ads_one);
loadFacebookBannerAds();
}
我的代码正在加载Facebook广告,
private void loadFacebookBannerAds() {
this.facebookAdOne = new com.facebook.ads.AdView(this, getString(R.string.fb_ad_id_one),
AdSize.BANNER_320_50);
//This setting is to load test ads served by Facebook. Just delete whole line in live app
AdSettings.addTestDevice("TestDeviceID");
this.facebookAdOneLayout.addView(this.facebookAdOne);
this.facebookAdOne.loadAd();
}
现在,我也在onPause,onDestroy和onStop中调用destroy()
方法来销毁facebook广告
if (facebookAdOne != null) {
facebookAdOne.destroy();
}
在调用Facebook的destroy方法后,我也调用onPause,onStop和onDestroy的所有超级方法。因此,当我通过单击后退按钮退出活动时,在我的Android监视器中,我收到一条错误消息,说明了,
Activity test.app.MainActivity has leaked IntentReceiver com.facebook.ads.internal.h$c@94eb1f that was originally registered here. Are you missing a call to unregisterReceiver()?
android.app.IntentReceiverLeaked: Activity test.app.MainActivity has leaked IntentReceiver com.facebook.ads.internal.h$c@94eb1f that was originally registered here. Are you missing a call to unregisterReceiver()?
所以有人能告诉我该怎么做?错误在哪里?我尝试了很多方法来为此找到解决办法,但无法在网上获得任何内容。
谢谢,
答案 0 :(得分:1)
在Facebook Audience network changelog中,有一行提到由版本4。16。0(2016年9月27日发布)中的内部类LocalBroadcastReceiver引起的内存泄漏。
LocalBroadcastReceiver持有MediaView导致内存泄漏 参考
如果您创建了许多MediaView,实例使用的资源将无法正确释放,最终会导致OutOfMemoryError。 从版本4.16.0,这个错误似乎是修复的,我注意到没有内存泄漏。
不幸的是,版本4.16.0中似乎出现了另一个问题。 根据我的经验,MediaView中的视频不再自动播放。此外,自动播放的控制已被删除,我们可以阅读4.16.0 changelog:
在MediaView
中弃用了setAutoplay和setAutoplayOnMobile
对于高达4.18.0(含)的版本,这仍然适用。我无法使用版本4.19.0进行测试,因为它在自定义视图的膨胀期间神秘地使我的应用程序崩溃(仍在试图找出原因)。