Android在静态类中加载Admob广告

时间:2013-05-13 13:12:50

标签: android android-layout admob

我有一个大约有10个活动的应用程序。 当用户在活动之间导航时,我想分享同一个广告,因此每次用户导航时我都会避免重新加载广告。(我希望保留广告的常规刷新时间。)

我想将广告加载到一个静态类中,所有活动都会使用 - 这里是否有人实现了这样的解决方案并且可以分享他们的经验(假设可能)?

如果解决方案不可行,还有其他想法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

我没有机会尝试这一点,但我没有看到任何理由为什么你的静态对象解决方案不起作用。您可以在活动之间共享静态对象,但是您需要注意,在某些情况下,它们都可以同时使用一个对象,这可能会导致一些冲突。您的解决方案应该易于实施和测试。让我们知道发生了什么。

希望这有助于并享受您的工作。

答案 1 :(得分:0)

我有一个游戏应用,我会在每个级别后显示插页式广告。这是我在应用中首次尝试广告。我使用的是新版Google Play服务版。

我决定将所有与AdMob相关的代码分组到一个地方,因此我设置了一个类,并将所有内容设置为静态,类似于您所描述的内容。结果是广告显示,但只有一些时间。此外,应用程序(直到那时运行顺利)变得抽搐,并且受到不可思议的,不可重复的错误的影响。

经过几天的拉动,我将代码移动到活动之后,广告应该在该活动中运行并使它们成为活动中的最后一次调用。我还使所有的函数和变量都是非静态的。结果是所有问题都神奇地消失了,游戏再次顺利运行。

在纸面上,我无法理解为什么静态变量会导致这些问题,但我建议任何想要走这条路的人都要避免它,除非他们喜欢不可思议的错误。

答案 2 :(得分:0)

item_banner

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black">

<com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ads:adSize="SMART_BANNER"
    ads:adUnitId="@string/admob_banner_unitID_test">
</com.google.android.gms.ads.AdView>
@ActivityScoped //or singleton
class AdMobRepository @Inject constructor(
  private val context: Context,
  private val podoalRepository: PodoalRepository
) {
  val adRequest = AdRequest.Builder().build()

  val staticBanner = ItemBannerBinding.inflate(LayoutInflater.from(context)).apply {
    adView.loadAd(adRequest)
  }.root
}

自定义视图

@ActivityScoped //or singleton
@AndroidEntryPoint
class AdmobBanner  : FrameLayout {

@Inject lateinit var adMobRepository: AdMobRepository

constructor(context: Context) : super(context) {
    init(context)
}

constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
    init(context)
}

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    init(context)
}

init {
    addView(adMobRepository.staticBanner.apply { removeSelf() })
}
}

fun View?.removeSelf() {
this ?: return
val parentView = parent as? ViewGroup ?: return
parentView.removeView(this)
}

在xml中

 <AdmobBanner
    app:layout_constraintTop_toTopOf="parent"
    android:layout_width="match_parent"
    android:layout_height="50dp"/>