如何每隔X秒显示插屏广告?

3
我需要在我的应用中每隔一定时间展示插页式广告。我已经设置了代码,它可以正常工作,但问题是,即使应用程序关闭,插页式广告仍然会出现。
当应用程序关闭时,我该如何停止插页式广告的显示?
谢谢。
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());
    }
}
1个回答

3

看起来您的Activity在后台运行,用户将能够看到广告,因为一旦您的Activity被销毁,那么您的广告就无法显示,没有"this"上下文,也没有Activity。

第一步:在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;
   }

}

不是固定的...如果有一个解决方案可以制作一个退出应用程序并停止广告的按钮,那就太好了。谢谢。 - Red One
@RedOne 有可能调度程序无法取消挂起的任务,请尝试使用更新的代码,它将仅在活动可见时显示广告。 - Pavneet_Singh
已解决 :) 谢谢 - Red One

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接