【发布时间】:2020-07-23 11:18:20
【问题描述】:
背景
我正在尝试实现对 Admob 原生广告的支持。
问题
我注意到this requirement:
确保所有 UnifiedNativeAd 引用都在您的 Activity 的 onDestroy() 方法。
在您的 onUnifiedNativeAdLoaded 回调中,确保销毁任何 将被取消引用的现有原生广告。
但是,我想在到达 Activity 之前预加载广告,并且如果可能的话,在通过配置更改(或至少在方向更改)重新创建 Activity 时重新使用广告。甚至可以在多个地方重复使用广告,以减少重新加载的时间。
我发现了什么
我找不到关于这个的解释,除了可以预加载:
https://developers.google.com/admob/android/native/start?hl=en-US#when_to_request_ads
它还说我们不应该使用预加载且一小时未使用的广告:
任何已持有超过一小时的广告对象 正在展示的广告应该被丢弃并替换为来自 新请求。
关于在没有引用广告时销毁广告的要求,我已将广告的包装放入缓存引用中,如果不再需要它,我会将其从缓存中删除。包装器应该使用finalize 删除广告,如下所示:
class UnifiedNativeAdWrapper(private val ad: UnifiedNativeAd) {
@UiThread
fun getAd(): UnifiedNativeAd? {
if (isDestroyed)
return null
return ad
}
@Suppress("MemberVisibilityCanBePrivate")
var isDestroyed = false
private set
@Suppress("unused", "ProtectedInFinal")
protected fun finalize() = destroy()
@UiThread
fun destroy() {
if (isDestroyed)
return
isDestroyed = true
ad.destroy()
}
}
问题
-
每次 Activity 被销毁时都可以避免这么快销毁吗?也许只有在不改变配置的情况下才销毁广告?
-
我做的包装纸可以吗?
-
既然它说我还应该避免使用加载后一小时未使用的广告,那么一旦我在 UnifiedNativeAd 上调用
destroy,使用 UnifiedNativeAd 的 UnifiedNativeAdView 会发生什么情况?可以在加载新的时在使用的旧的上调用destroy吗?我想避免在加载新视图时删除视图... -
既然它说可能有多个对广告的引用,那么同一个 UnifiedNativeAd 实例可以在多个地方(不同的活动)使用吗?
【问题讨论】:
标签: android admob native-ads unifiednativeadview