我有一个包含大约 10 个活动的应用程序。当用户在活动之间导航时,我想分享同一个广告,所以我会避免每次用户导航时重新加载广告。(我想保持广告的定期刷新时间)。
我想将广告加载到所有活动都将使用的静态类中 - 这里是否有人实施了这样的解决方案并可以分享他们的经验(假设可能)?
如果解决方案不可能,还有其他想法吗?
谢谢!
我有一个包含大约 10 个活动的应用程序。当用户在活动之间导航时,我想分享同一个广告,所以我会避免每次用户导航时重新加载广告。(我想保持广告的定期刷新时间)。
我想将广告加载到所有活动都将使用的静态类中 - 这里是否有人实施了这样的解决方案并可以分享他们的经验(假设可能)?
如果解决方案不可能,还有其他想法吗?
谢谢!
我没有机会尝试这个,但我看不出有任何理由说明你的静态对象解决方案不起作用。您可以在活动之间共享静态对象,但您需要注意,在某些情况下,它们可以同时使用一个对象,这可能会导致一些冲突。您的解决方案应该易于实施和测试。让我们知道发生了什么。
希望这对您有所帮助并享受您的工作。
我有一个游戏应用程序,我会在每个级别后显示一个插页式广告。这是我第一次尝试在应用程序中投放广告。我正在使用新的 Google Play 服务版本。
我决定将所有与 AdMob 相关的代码组合在一个地方,因此我设置了一个类并将所有内容都设为静态,类似于您所描述的。结果是广告展示了,但只是在某些时候。此外,该应用程序(在此之前运行平稳)变得紧张,并受到难以理解、不可重复的错误的影响。
经过几天的拉扯,我将代码移到了应该运行广告的活动中,并使它们成为活动中的最后一次调用。我还使所有函数和变量都变成了非静态的。结果是所有问题都神奇地消失了,游戏再次顺利进行。
在纸面上,我不明白为什么静态变量会导致这些问题,但我对任何想走这条路的人的建议是避免它,除非他们喜欢难以理解的错误。
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"/>