【问题标题】:How to Show Interstitial Ad every X Seconds如何每 X 秒显示一次插页式广告
【发布时间】:2017-12-17 17:38:36
【问题描述】:

我需要每隔 x 秒在我的应用中展示一次插页式广告。我已经关闭了这个代码。它工作正常,但问题是,即使应用关闭,插页式广告仍会显示。

当应用关闭时,我怎样才能停止这种情况?

谢谢。

public class MainActivity extends AppCompatActivity {

    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        prepareAd();

        ScheduledExecutorService scheduler =
                Executors.newSingleThreadScheduledExecutor();

        scheduler.scheduleAtFixedRate(new Runnable() {
            public void run() {
                Log.i("hello", "world");
                runOnUiThread(new Runnable() {
                    public void run() {
                        if (mInterstitialAd.isLoaded()) {
                            mInterstitialAd.show();
                        } else {
                           Log.d("TAG"," Interstitial not loaded");
                        }

                        prepareAd();
                    }
                });
            }
        }, 10, 10, TimeUnit.SECONDS);
    }

    public void  prepareAd() {
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
    }
}

【问题讨论】:

    标签: android android-studio ads interstitial


    【解决方案1】:

    您的活动似乎在后台,然后用户将能够看到广告,因为一旦您的活动被破坏,您的广告将无法显示,没有this 上下文没有活动。

    首先:在onCreate之外保留对ScheduledExecutorService的引用

    第二:覆盖onStop并调用scheduler.shutdownNow()

    onStop : 当你的activity进入后台状态时会被调用

    shutdownNow() : 将尝试停止当前正在运行的任务并停止等待任务的执行

    所以即使你的应用在后台,这也会停止执行器

    public class MainActivity extends AppCompatActivity {
    
        private InterstitialAd mInterstitialAd;
        private ScheduledExecutorService scheduler;
        private boolean isVisible;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            prepareAd();
        }
    
    
        @Override
        protected void onStart(){
        super.onStart();
            isVisible = true;
            if(scheduler == null){
                scheduler = Executors.newSingleThreadScheduledExecutor();
                scheduler.scheduleAtFixedRate(new Runnable() {
            public void run() {
                Log.i("hello", "world");
                runOnUiThread(new Runnable() {
                    public void run() {
                        if (mInterstitialAd.isLoaded() && isVisible) {
                            mInterstitialAd.show();
                        } else {
                           Log.d("TAG"," Interstitial not loaded");
                        }
    
                        prepareAd();
                    }
                });
            }
        }, 10, 10, TimeUnit.SECONDS);
    
            }
    
        }    
        //.. code 
    
        @Override
        protected void onStop() {
            super.onStop();
            scheduler.shutdownNow();
            scheduler = null;
            isVisible =false;
       }
    
    }
    

    【讨论】:

    • 未修复..如果有解决方案可以让按钮退出应用程序并停止广告会很好谢谢
    • @RedOne 可能是调度器无法取消挂起的任务,尝试更新的代码,它只会在活动可见时显示广告
    • 已解决 :) 谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-11-27
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多