我有一个大约有10个活动的应用程序。 当用户在活动之间导航时,我想分享同一个广告,因此每次用户导航时我都会避免重新加载广告。(我希望保留广告的常规刷新时间。)
我想将广告加载到一个静态类中,所有活动都会使用 - 这里是否有人实现了这样的解决方案并且可以分享他们的经验(假设可能)?
如果解决方案不可行,还有其他想法吗?
谢谢!
答案 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"/>