0

我有一个包含大约 10 个活动的应用程序。当用户在活动之间导航时,我想分享同一个广告,所以我会避免每次用户导航时重新加载广告。(我想保持广告的定期刷新时间)。

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

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

谢谢!

4

3 回答 3

0

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

希望这对您有所帮助并享受您的工作。

于 2013-05-15T00:00:56.003 回答
0

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

我决定将所有与 AdMob 相关的代码组合在一个地方,因此我设置了一个类并将所有内容都设为静态,类似于您所描述的。结果是广告展示了,但只是在某些时候。此外,该应用程序(在此之前运行平稳)变得紧张,并受到难以理解、不可重复的错误的影响。

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

在纸面上,我不明白为什么静态变量会导致这些问题,但我对任何想走这条路的人的建议是避免它,除非他们喜欢难以理解的错误。

于 2014-05-07T12:35:23.947 回答
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"/>
于 2021-08-01T03:49:42.370 回答