为无广告用户安全地从 LinearLayout 中删除 AdView

Safely Removing an AdView from a LinearLayout for Ad Free Users

我有一个 Android 应用程序,里面有横幅广告。我只在检查了要显示的广告后才将 AdView 元素放入 LinearLayout。

但是,用户可以在节目的 运行 时间内购买 NoAds。这意味着我必须安全地停止广告并从程序中删除 Adview,而不会违反无法隐藏广告的 Admob 规则。

这是我的代码,但我非常不确定 if 语句中第 if (mAdView != null) { // It might not be created yet.

行的部分

是不是只是隐藏,而不是完全删除?:

public void turnAdvertsOnOff(boolean on) {
    advertsOn = on;

    // IMPORTANT - changes to layout must be done on the UI Thread or will get error
    m_Context.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            LinearLayout myLayout;
            // NEW
            //AdView mAdView;

            myLayout = (LinearLayout) m_Context.findViewById(R.id.myLayout);
            //mAdView = (AdView) m_Context.findViewById(R.id.adView);

            if(advertsOn){
                if(mAdView == null && myLayout != null) {
                    // Create it and add it to the LinearLayout
                    mAdView = new AdView(m_Context);
                    // Sizes BANNER, SMART_BANNER, LARGE_BANNER
                    mAdView.setAdSize(AdSize.SMART_BANNER);
                    mAdView.setAdUnitId(adIdBanner);
                    myLayout.addView(mAdView);
                }
                if (mAdView != null) mAdView.setVisibility(View.VISIBLE);
            }else {
                if (mAdView != null) { // It might not be created yet
                    mAdView.pause();
                    mAdView.setEnabled(false);
                    mAdView.setVisibility(View.GONE);
                    //mAdView.destroy();
                    //mAdView.setVisibility(View.INVISIBLE);
                    //mAdView.pause();
                    //mAdView.setVisibility(View.GONE);
                }
            }
        }});
}

首选方法是 remove() 来自其父级的 AdView
为什么不将“可见性”设置为“消失”?
如果将可见性设置为GONE,AdView 仍会请求广告服务器填写广告,因此最好完全删除AdView

例如-
在布局文件中添加 AdView,如果用户通过 IAP 删除了广告,只需调用 myLayout.removeView(mAdView);

此外,如果您从 ui 线程调用 turnAdvertsOnOff(),则无需调用 runOnUiThread()